2013-03-01 131 views
0

我有一個awk命令工作正常:AWK不工作在for循環

awk '$1==1{print $1,$2,$4}' file > out1 

如果我把同樣的awk命令在for循環但是,我只得到emtpy輸出文件:

for i in {1..22} 
do 
awk '$1==$i{print $1,$2,$4}' file > out$i 
done 

這給出了22個空輸出文件。 for循環有什麼問題?

+1

你得到了你的答案,但只是爲了確保清楚:'我'是一個shell變量,而不是awk變量。 awk不是shell。你的shell變量在awk腳本中不可見,它們不會在C程序中看到,因此需要通過awk變量將awue變量的值傳遞給awk(或其他不太可取的方法,請參見http: //cfajohnson.com/shell/cus-faq-2.html#Q24)。 – 2013-03-01 19:55:14

+0

謝謝,這清除它! – Abdel 2013-03-01 20:04:39

回答

2

嘗試:

for i in {1..22} 
do 
awk -v num="$i" '$1==num{print $1,$2,$4}' file > out$i 
done 
1

嘗試這一行:

awk -vvar="$i" '$1==var{print $1,$2,$4}' file >out$i 

其實你並不需要一個for循環,如果你的$ 1總是一個整數,試試這個太:

awk '$1>0&&$1<=22{print $1,$2,$4>"out"$1}' file