命令行参数的失败= $ 1和awk列1 = $ 1

时间:2012-09-23 03:39:11

标签: unix

我正在尝试读取文件的第一行并找到命令行中指定的列。例如:command <column> <textfile>因此列为$1,文本文件为$2

我正在写一个awk命令将文件列拆分成一个数组,然后写一个for循环来检查数组元素何时与列参数匹配。这是代码:

awk 'NR == 1 {split ( $0,titles ); for ( i=1 ; titles[i] != "$1" ; i++ ) ; FS = " "} NR > 1 {print $i }' file

我希望$1引用第一个命令行参数而不是awk看到的第一列。 如何在for循环中获取column参数?我认为我可以为$1创建一个变量并将其传递给awk但是这不起作用或者我做了它错了 - 无论是/或。我一直在寻找关于这个的东西几个小时。我可能会遗漏一些明显或愚蠢的东西,但它已经到了我真正需要知道如何做到这一点。我在寻找答案时也阅读了ARGV[]的内容。我想ARGV[1] == $1但显然不是ARGV数组引用的是什么?谢谢你尽你所能的帮助。

(注意:只是为了帮助解决任何混淆文件是已编辑的文本文件版本,称为$ 2)

1 个答案:

答案 0 :(得分:2)

在awk中,第一个命令行参数是ARGV[1],而$1是当前行的第一个单词。他们是完全不同的两件事。

例如:

$ awk 'BEGIN { print "ARGV[1] =", ARGV[1] }' foo bar
ARGV[1] = foo