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

时间:2015-10-17 16:57:13

标签: 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
    ((i++))
done

正如你所看到的,我希望首先找到行数,num_rows和循环遍历这些行,并使用AWK的NR函数遍历每一行并首先打印第一列和第二列,然后是第三和第四列。上述脚本运行时会产生以下错误:

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不起作用。谢谢你的帮助。

1 个答案:

答案 0 :(得分:6)

您可以通过

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

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