假設我們有乙個資料檔案形如下:
a,ba,c
a,db,e
b,fd,a
d,be,g
需求是要將其轉變為如下形式:
a:b,c,d
b:e,f
d:a,b
e,g需求很簡單,迴圈遍歷檔案,然後trace第一列即可。
在這裡,我們討論用shell指令碼如何實現這個簡單的需求。
在shell中面對這樣的需求,最好的辦法莫過於使用awk了,不過除了awk之外,linux也有其他命令能遍歷檔案內容,比如說cat以及輸入重定向等,下面我們就對這幾種檔案遍歷方法做下比較。
首先申明一點,關於檔案遍歷過程中,如果得到目標結果的邏輯是一樣的,說白了就是每讀入一行,檢查第一列而已。
1. awk方法:
begin2. forin+cat方法:else if(curmember != $1)
else
}end
#!/bin/bash3. 檔案描述符開啟檔案curmember="";
offer="";
#cat orderinfo | while read line
for line in `cat orderinfo`
do tmpmember=$;
if [ "$curmember" == "" ]; then
curmember=$tmpmember
offer=$
elif [ "$tmpmember" != "$curmember" ]; then
echo $:$
curmember=$
offer=$
else
offer=$,$
fidone
echo $:$
#!/bin/bash
curmember="";
offer="";
exec 44. while迴圈中直接輸入重定向
#!/bin/bash
curmember="";
offer="";
while read line
do tmpmember=$;
if [ "$curmember" == "" ]; then
curmember=$tmpmember
offer=$
elif [ "$tmpmember" != "$curmember" ]; then
echo $:$
curmember=$
offer=$
else
offer=$,$
fidone四種方法的執行效率如下,檔案行數69000+
awk : 185 ms
forin : 7187 ms
exec : 7931 ms
while : 7708 ms
上述結果中awk速度是最快的,其他三個雖然各有快慢,但都差不多,而且都比awk要慢很多。
shell 檔案比較
d file 檢查file是否存在並是乙個目錄 e file 檢查file是否存在 f file 檢查file是否存在並是乙個檔案 r file 檢查file是否存在並可讀 s file 檢查file是否存在並非空 w file 檢查file是否存在並可寫 x file 檢查file是否存在並可執行...
shell遍歷檔案
有時候要對某個資料夾下面的所有檔案做同樣的處理,比如對每個檔案統計行數,這時用遍歷檔案的方式就很簡單了。for i in ls do wc l i done 55552 f123.txt 55819 f124.txt 56118 f125.txt 56404 f126.txt 56633 f127....
shell程式設計 檔案比較
d file file是否存在並是乙個目錄 e file file 是佛偶存在 f file file是否存在並是乙個檔案 r file file是否存在並可讀 s file file是否存在並非空 w file file是否存在並可寫 x file file 是否存在並可執行 o file fil...