2012-05-09 92 views
2

我有兩組文本文件。第一套在AA文件夾中。第二套在BB文件夾中。下面顯示了第一組(AA文件夾)中ff.txt文件的內容。用bash從文本文件中刪除行

Name  number  marks 
john   1   60 
maria   2   54 
samuel   3   62 
ben    4   63 

我想從該文件打印第二列(數字)如果標記> 60。輸出將是3,4。接下來,讀取BB文件夾中的ff.txt文件,並刪除包含數字3,4的行。我怎樣才能用bash做到這一點?

BB文件夾中的文件看起來像這樣。第二列是數字。

marks  1  11.824 24.015 41.220 1.00 13.65 
    marks  1  13.058 24.521 40.718 1.00 11.82 
    marks  3  12.120 13.472 46.317 1.00 10.62 
    marks  4  10.343 24.731 47.771 1.00 8.18 
+0

不應該輸出3,4,因爲只有62和63大於60? – Mithrandir

+0

是的,你是對的 – rebca

+0

我會用awk來過濾輸出...你有沒有考慮過這個問題? – Mithrandir

回答

0

這工作,但效率不高(是怎麼回事?)

gawk 'BEGIN {getline} $3>60{print $2}' AA/ff.txt | while read number; do gawk -v number=$number '$2 != number' BB/ff.txt > /tmp/ff.txt; mv /tmp/ff.txt BB/ff.txt; done 

當然,第二AWK可以用SED -i


對於多文件被替換:

ls -1 AA/*.txt | while read file 
do 
    bn=`basename $file` 
    gawk 'BEGIN {getline} $3>60{print $2}' AA/$bn | while read number 
    do 
     gawk -v number=$number '$2 != number' BB/$bn > /tmp/$bn 
     mv /tmp/$bn BB/$bn 
    done 
done 

我沒有測試它,s o如果有問題,請評論。

+0

太棒了。完美地工作。謝謝。 – rebca

+0

您的代碼完美適用於單個文件。但對於多個文件,我得到像這樣的錯誤「mv:target'BB/hh.txt'不是目錄」。如何更改您的代碼以使用多個文件運行? – rebca

+0

請寫出您爲多個文件執行的命令 –

1
awk 'FNR == NR && $3 > 60 {array[$2] = 1; next} {if ($2 in array) next; print}' AA/ff.txt BB/filename