我花了一个多小时来研究这个。这不可能这么难...我想将一个文件中的一列数据打印到另一个文件中。我想要打印的列取决于传入的内容以及脚本中前面发生的内容,但它称为 COL。我需要从中提取信息的文件称为 $1.db,$1 是传入的第一个参数(已检查它是否存在)。我目前拥有的:
awk -v colvar="$COL" '{ print $colvar }' "$1.db" >> tmp2.tmp
这会导致 $1.db 的全部内容被打印到 tmp2.tmp,而不仅仅是列。
当我 sh -xv 时,我明白了
awk -v colvar="$COL" '{ print $colvar }' "$1.db" >> tmp2.tmp
+ awk -v colvar=3 '{ print $colvar }' cop4342.db
因此,我看到 awk var 被设置为 COL 的值,但它没有在 print 语句中被替换。我怀疑这是由于单引号造成的,但不知道该怎么办。任何帮助表示赞赏:)
答案1
如果你只想提取一列数据,你可以使用cut
。例如,如果文件example.dat
包含
a b c d e
1 2 3 4 5
然后cut -d ' ' -f 3 example.dat
给出
c
3
这里的字段分隔符是一个空格,我们选择第三列。
编辑:此 bash 脚本调用 awk 来生成等效的输出:
#!/bin/bash
var1=$1
awk '{print $colvar}' colvar=$1 example.dat