将Bash Shell变量传递给Awk NR函数

将Bash Shell变量传递给Awk NR函数,bash,awk,Bash,Awk,我希望循环使用M行X N列的值数组,并将它们打印到屏幕上以供以后的脚本使用,但我在循环和NR方面遇到了问题。到目前为止,我得到的是: #!/bin/bash cat temp_file | wc -l > num_rows i="0" while [ $i -le `cat num_rows` ]; do echo $i awk 'NR==$i{print $1, $2}' temp_file awk 'NR==$i{print $3, $4}' temp_file

我希望循环使用M行X N列的值数组,并将它们打印到屏幕上以供以后的脚本使用,但我在循环和NR方面遇到了问题。到目前为止,我得到的是:

#!/bin/bash
cat temp_file | wc -l > num_rows
i="0"
while [ $i -le `cat num_rows` ]; do
    echo $i
    awk 'NR==$i{print $1, $2}' temp_file
    awk 'NR==$i{print $3, $4}' temp_file
    ((i++))
done
如您所见,我希望先使用查找行数、num_行,然后循环遍历这些行中的每一行,然后使用AWK的NR函数遍历每一行并首先打印第1列和第2列,然后打印第3列和第4列。运行上述脚本时会出现以下错误:

0
awk: illegal field $(), name "i"
 input record number 1, file temp_file
 source line number 1
awk: illegal field $(), name "i"
 input record number 1, file temp_file
 source line number 1
1
awk: illegal field $(), name "i"
 input record number 1, file temp_file
 source line number 1
awk: illegal field $(), name "i"
 input record number 1, file temp_file
 source line number 1
2
awk: illegal field $(), name "i"
 input record number 1, file temp_file
 source line number 1
awk: illegal field $(), name "i"
 input record number 1, file temp_file
 source line number 1
3
awk: illegal field $(), name "i"
 input record number 1, file temp_file
 source line number 1
awk: illegal field $(), name "i"
 input record number 1, file temp_file
 source line number 1
4

依此类推,直到while循环完成。任何关于如何修复此脚本的想法,因为现在,设置NR==$i不起作用。谢谢您的帮助。

您可以通过将
i
传递给awk

awk -v i=$i 'NR==i{print $1, $2}' temp_file


您可以通过将
i
传递给awk

awk -v i=$i 'NR==i{print $1, $2}' temp_file


不能用
awk'{print$3,$4}'临时文件替换整个脚本吗?
?我已经编辑了上面的脚本。我需要调用awk两次,首先打印前两列,然后再打印第二列。整个脚本不是被
awk'{print$1,$2;print$3,$4}'临时文件替换吗。我很抱歉说不清楚。我只需要处理每行的输出,因为我将采用此逻辑并将输出发送到一个临时文件,该文件将在脚本的另一部分中使用。所以,我只想处理每一行,而不是一次打印每一行的所有列。难道不能用
awk'{print$3,$4}'temp_file
替换整个脚本吗?我已经编辑了上面的脚本。我需要调用awk两次,首先打印前两列,然后再打印第二列。整个脚本不是被
awk'{print$1,$2;print$3,$4}'临时文件替换吗。我很抱歉说不清楚。我只需要处理每行的输出,因为我将采用此逻辑并将输出发送到一个临时文件,该文件将在脚本的另一部分中使用。所以,我只想处理每一行,而不是一次打印每一行的所有列。谢谢slitvinov。这就是我的问题:将shell变量传递给NR值。谢谢你的帮助。我要换个头衔,谢谢你,斯莱维诺夫。这就是我的问题:将shell变量传递给NR值。谢谢你的帮助。我要换个头衔。