我想将变量传递给awk,其中包含要从文件中打印的列?
在这个简单的案例中,file.txt包含一行
11 22 33 44 55
这是我尝试过的:
awk -v a='2/4' -v b='$2/$4' '{print a"\n"$a"\n"b"\n"$b}' file.txt
输出:
2/4
22
$2/$4
11 22 33 44 55
期望的输出:
0.5
有没有办法将这种类型的变量“eval”作为命令?
答案 0 :(得分:1)
以下是一种划分变量中指定列的方法:
$ awk -v num=2 -v denom=4 '{print $num/$denom}' file.txt
0.5
如果您信任创建shell变量b
的人,那么这是一种提供灵活性的方法:
$ b='$2/$4'; awk "{print $b}" file.txt
0.5
$ b='$1*$2'; awk "{print $b}" file.txt
242
$ b='$2,$2/$4,$5'; awk "{print $b}" file.txt
22 0.5 55
这里的灵活性是由于b
可以包含任何awk
代码。这种方法要求您信任b
的创建者。