我希望遍历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不起作用。谢谢你的帮助。
答案 0 :(得分:6)
您可以通过
将i
传递给awk
awk -v i=$i 'NR==i{print $1, $2}' temp_file
或
awk 'NR=='$i'{print $1, $2}' temp_file