Bash腳本:怎樣一行行地讀文件(最好和最壞的方法)

用bash腳本讀文件的方法有很多。請看第一部分,我使用了while循環及其后的管道命令(|)(cat $FILE | while read line; do …?),并在循環當中遞增 i 的值,最后,我得到了非我所想的 i 。主要的原因是,管道命令會發起子shell來讀取文件,而任何在(子shell的)while循環中的操作(例如 i ++),都會隨著子shell的結束而丟失。

而第二種,也是最壞的一種,其最明顯的錯誤就是在讀文件的過程中使用了for循環(for fileline in $(cat $FILE);do ..),這樣每打印一個單詞就換一次行,因為for循環使用空格作為默認的IFS。

完美的方法,即第三種的while循環(while read line;do …. done < $FILE)?是最合適且最簡單的一行行地讀文件的方法。請看以下例子。

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Input: $ cat sample.txt
This is sample file
This is normal text file
Source: $ cat readfile.sh
#!/bin/bash
i=1;
FILE=sample.txt
# Wrong way to read the file.
# This may cause problem, check the value of 'i' at the end of the loop
echo "###############################"
cat $FILE | while read line; do
????????echo "Line # $i: $line"
????????((i++))
done
echo "Total number of lines in file: $i"
# The worst way to read file.
echo "###############################"
for fileline in $(cat $FILE);do
????????echo $fileline
done
# This is correct way to read file.
echo "################################"
k=1
while read line;do
????????echo "Line # $k: $line"
????????((k++))
done < $FILE
echo "Total number of lines in file: $k"
Output: $ ./readfile.sh
###############################
Line # 1: This is sample file
Line # 2: This is normal text file
Total number of lines in file: 1
###############################
This
is
sample
file
This
is
normal
text
file
################################
Line # 1: This is sample file
Line # 2: This is normal text file
Total number of lines in file: 3

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447516.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447516.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447516.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決:無法獲取實體類com.xxx.xx.xx.xx.dto.XxxDTO對應的表名

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.報錯如題&#xff1a; 無法獲取實體類com.xxx.xx.xx.xx.dto.XxxDTO對應的表名 2. 報錯原因&#xff0c;如下圖紅框中部分&#xff0c…

IDEA 查看最近修改、已提交文件

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 如圖&#xff1a;點擊 Version Control --> Repository --> 最左邊藍色圓圈 --> 選擇一條提交日志&#xff1a;右邊就…

程序員賺錢致富的6種方法

我認識一個朋友&#xff0c;也是程序員出身&#xff0c;他在一家還不錯的外企上班&#xff0c;每個月工資收入也就差不多15K&#xff0c;五年的工作經驗了&#xff0c;在他面前&#xff0c;我算是小弟。那天我們幾個朋友一起打完球就去附近的飯館吃飯&#xff0c;環境還不錯&am…

解決:Changes not staged for commit:

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. git push 報錯&#xff1a; 2. 提交時加上參數&#xff1a;-a &#xff0c;表示新增。 git commit -am "提交說明" 提交成…

內存不足:殺死進程還是犧牲子進程

早上6點&#xff0c;我不得不開始處理“叫醒”我的一些問題。因為當這些問題發生的時候&#xff0c;我的手機鈴聲響了。昏睡中的我非常不情愿地拿起了手機&#xff0c;檢查我是否瘋狂到將叫醒鬧鐘設在了早上5點。原來是監控系統發現一個Plumbr服務死掉了。 作為一名該領域經驗…

java8 注解: @FunctionalInterface (函數式接口)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Java8提倡函數式編程&#xff0c;因而新增了一個函數式接口。函數式接口保證了函數式編程&#xff0c;同時也保證了能夠兼容以前的java版…

寫給年輕程序員的一封信

很多年輕的程序員發emails給我&#xff0c;說希望能夠得到一些如何盡快躋身優秀程序員行列的建議和方法。關于這個問題&#xff0c;我已經有提到過很多次&#xff0c;現在已經沒什么可以補充的了。不過 為了滿足大家的要求&#xff0c;在這里我再詳細地歸納總結一下&#xff1a…

Docker中RocketMQ的安裝與使用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 搜索RocketMQ的鏡像&#xff0c;可以通過docker的hub.docker.com上進行搜索&#xff0c;也可以在Linux下通過docker的search命令進行搜索…

大浪淘沙:不是所有的IT公司都以成功收場

本文列舉了50家創業公司沒有什么先后順序&#xff0c;最后顯示&#xff0c;其中21家是獨立公司&#xff0c;19家被收購了&#xff0c;4家正在走下坡路&#xff0c;6家已倒閉。但是我希望有更多的公司徹底倒閉&#xff0c;留下實力最強大的公司。公司倒閉也許是重新開始的標志。…

解決:阿里云ECS服務器 遠程連接不上、極慢 (主機監控的實現)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 個人低配版的阿里云ECS服務器&#xff0c;突然發現用 Xshell 或者 git-bash 都連接不上... 第一反應發工單去問下為什么&#xff0c;然…

TIOBE 2014年7月編程語言排行榜:僅發布1月,Swift進Top 20!

摘要&#xff1a;TIOBE7月編程語言排行榜發布&#xff0c;本月最值得關注的是&#xff0c;蘋果公司在WWDC 2014上推出新的編程語言Swift&#xff0c;發布至今僅一月有余&#xff0c;Swift竟擠進TIOBE排行榜的Top 20&#xff0c;排名第16位。Swift能取得如此驕人的成績&#xff…

Math對象方法總結(向上取整、向下取整、四舍五入、取隨機數,取最大值、取最小值)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。

Docker 方式安裝 gitlab ( 阿里云ECS )

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.查找鏡像&#xff1a; docker search gitlab 2. 拉取鏡像&#xff1a; docker pull 鏡像名 我選擇的是搜索出來的第一個鏡像&…

商用的碼流分析工具/YUV viewer

目前市場上有一些商用的碼流分析工具是比較好的&#xff0c;能夠輔助我們進行各個標準的碼流分析&#xff1a; 1. Elecard StreamEye系列 可以分析H264/MPEG4/MPEG2的碼流&#xff0c;暫時不支持其它標準。 2. H264VISA 比較好的H264碼流分析工具 3. Vegas vegas是interra s…

生成多個 SSH-Key 、生成多個公鑰和私鑰

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 當有多個倉庫要同時使用時&#xff0c;需要配置多個公鑰、私鑰。于是就要先生成多個。 PS&#xff1a;初次生成參見文章&#xff1a;查…

使用Lucid Virtu在有獨立顯卡的情況下使用Intel硬件加速H.264編碼

在硬編碼領域&#xff0c;大家都知道CUDA技術對于H.264視頻編碼速度的提升。然而實際上常見的高清H.264視頻壓縮都不是用CUDA技術進行硬編碼&#xff0c;而是用傳統的x264進行軟編碼&#xff0c;因為通過CUDA硬編碼的視頻效果遠遠差于x264軟編碼壓縮出的視頻效果。隨著Intel Sa…

執行ssh-add時出現Could not open a connection to your authentication agent

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 若執行ssh-add /path/to/xxx.pem是出現這個錯誤:Could not open a connection to your authentication agent&#xff0c;則先執行如下命…

Intel硬件加速 VS CUDA完勝 視頻轉碼感受

對比試用平臺介紹 在體驗了酷睿 I5 2300 在3D游戲和多任務、高清播放等方面的突出性能后&#xff0c;今天我利用空閑時間針對酷睿 I5 2300在高清轉碼方面上與本人的舊平臺上對比了一下.&#xff0c;其結果也讓人感到震撼。好了閑話不多說了&#xff0c;先來給自己新舊PC做個介紹…

解決 : Shell 腳本 $‘\r‘: command not found 問題

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.經查證&#xff0c;只是 Windows 的空行在 linux 中不識別&#xff0c;故需要用 dos2unix 來轉換。 2. 安裝 dos2unix&#xff0c;2 …

H.264 軟/硬編碼器 畫質量化分析評測

第1頁&#xff1a;前言——視頻壓縮無處不在H.264 或者說 MPEG-4 AVC 是目前使用最廣泛的高清視頻編碼標準&#xff0c;和上一代 MPEG-2、h.263/MPEG-4 Part4 相比&#xff0c;它的壓縮率大為提高&#xff0c;例如和 MPEG-2 相比&#xff0c;同樣的壓縮后畫面品質&#xff0c;h…