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

我希望遍历 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 不起作用。感谢您的帮助。

最佳答案

你可以将 i 传递给 awk

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

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

https://stackoverflow.com/questions/33189178/

相关文章:

regex - 用 perl 动态替换

python - 以非绝对方式指定兄弟文件夹的路径

google-apps-script - 谷歌应用程序脚本编辑器中的自动完成并不总是知道类型/上下文

drupal - 在新的 Drupal 8 站点上,子菜单链接没有出现?

linux-kernel - BUILDROOT ip : can't find device et

R - 拆分数据框并保存到不同的文件

java - 在时区字符串列表中根据 GMT 时间对时区进行排序

c# - 如何从整数生成 MD5 哈希(32/64 个字符)

jquery - VideoJS - 播放视频时,暂停所有其他视频

c# - 如何将流转换为 BitmapImage