2013-07-25 39 views
1

我想的多個文本文件列之間添加一個格式化的列。通過使用列添加到多個文本文件,使用bash

awk 'NR==FNR{c[NR]=$3;l=NR;next}{$2=($3+c[1])*c[l]" "$2}7' file file 

我可以轉換具有形式

1 2 3 4 
10 20 30 40 
100 200 300 400 

1 1800 3 4 
10 9900 30 40 
100 90900 300 400 

我該怎麼做上面的操作到多個.dat文件一個文件?

+1

做在你的殼'for'循環。 – Atropo

+0

我知道,但我該怎麼做? – Atoof

回答

1
tmp="/usr/tmp/tmp$$" 
for file in * 
do 
    awk '...' "$file" "$file" > "$tmp" && mv "$tmp" "$file" 
done 

WRT你的腳本,但:

awk 'NR==FNR{c[NR]=$3;l=NR;next}{$2=($3+c[1])*c[l]" "$2}7' file file 

切勿使用字母l(EL)作爲變量名,因爲它看起來太像數1(之一)。其實我把它寫成:

awk 'NR==FNR{c[++n]=$3;next}{$2=($3+c[1])*c[n]" "$2}7' file file 

,或者如果內存是一個大文件的擔憂:

awk 'NR==FNR{c[NR==1]=$3;next}{$2=($3+c[1])*c[0]" "$2}7' file file 
+0

我使用了以下內容: tmp =「../ tmp $$」;用於* .text中的文件;做awk'NR == FNR {c [NR] = $ 3; l = NR; next} {$ 2 =($ 3 + c [1])* c [l]「」$ 2} 7'「$ file」>「$ tmp「&& mv」$ tmp「」$ file「;完成。 但它只是刪除文件。 – Atoof

+0

是的,它會的。您忘了在arg列表中指定兩次文件。 –

+1

+1你的答案比我的完整 – Atropo

相關問題