Awk传递包含要打印的列的变量

时间:2015-08-05 05:10:41

标签: awk

我想将变量传递给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”作为命令?

1 个答案:

答案 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的创建者。