shell 中遍歷檔案的效果比較

2021-08-26 12:50:15 字數 1501 閱讀 8577

假設我們有乙個資料檔案形如下:

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方法:

begin

else if(curmember != $1)

else

}end

2. forin+cat方法:

#!/bin/bash

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 $:$

3. 檔案描述符開啟檔案

#!/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...