For loop awk不在for循环中工作

For loop awk不在for循环中工作,for-loop,awk,For Loop,Awk,我有一个工作正常的awk命令: awk '$1==1{print $1,$2,$4}' file > out1 但是,如果在for循环中使用相同的awk命令,则只会获得emtpy输出文件: for i in {1..22} do awk '$1==$i{print $1,$2,$4}' file > out$i done 这将提供22个空输出文件。 for循环有什么问题?试试这句话: awk -vvar="$i" '$1==var{print $1,$2,$4}' file &g

我有一个工作正常的awk命令:

awk '$1==1{print $1,$2,$4}' file > out1
但是,如果在for循环中使用相同的awk命令,则只会获得emtpy输出文件:

for i in {1..22}
do
awk '$1==$i{print $1,$2,$4}' file > out$i
done
这将提供22个空输出文件。 for循环有什么问题?

试试这句话:

awk -vvar="$i" '$1==var{print $1,$2,$4}' file >out$i
实际上,循环不需要这样做,如果$1始终是整数,也可以尝试以下方法:

awk '$1>0&&$1<=22{print $1,$2,$4>"out"$1}' file
awk'$1>0&&$1“out”$1}文件
试试这句话:

awk -vvar="$i" '$1==var{print $1,$2,$4}' file >out$i
实际上,循环不需要这样做,如果$1始终是整数,也可以尝试以下方法:

awk '$1>0&&$1<=22{print $1,$2,$4>"out"$1}' file
awk'$1>0&&$1“out”$1}文件
试试:

尝试:


您得到了答案,但只是为了确保答案清楚:
i
是一个shell变量,而不是awk变量。awk不是外壳。您的shell变量在awk脚本中不可见,正如它们在C程序中不可见一样,因此需要通过awk变量(或其他不太理想的方法,请参阅)将shell变量的值传递到awk中。谢谢,这就清除了它!您得到了答案,但只是为了确保答案清楚:
i
是一个shell变量,而不是awk变量。awk不是外壳。您的shell变量在awk脚本中不可见,正如它们在C程序中不可见一样,因此需要通过awk变量(或其他不太理想的方法,请参阅)将shell变量的值传递到awk中。谢谢,这就清除了它!