如何将参数直接传递给awk

时间:2015-09-08 06:13:44

标签: linux bash shell awk

我有一个文件,其中的列由分隔符分隔(在本例中为空格)。

打印我使用的列,

awk ' { print $1 "," $3 } filename

这将打印以逗号分隔的第1列和第3列。

现在我想发送$1 "," $3作为参数。所以我可以把它改成像$1 "-" $3这样的东西,我也应该能够像$1 "," $2 "-" $3一样改变参数的数量。

目标是动态传递字段和分隔符,即,awk命令将在一个文件中,模式应作为参数传递。是否可能

例如。

trigger.sh

#!/bin/bash

var="\$1\"\,\"\$2" #this is $1","$2

sh test.sh $var

test.sh

#!/bin/bash

awk -v var="$1" ' { print var}' data.dat

data.dat包含实际数据

但我无法获得所需的输出。

输出:

awk: warning: escape sequence `\,' treated as plain `,'
$1","$2 --> printing this instead of columns

1 个答案:

答案 0 :(得分:0)

我想动态传递参数/变量值。我找到了一种方法。

Str="awk ' { print "

t="\$1\",\"\$2 } ' " 
# above expression will be passed as an argument and will be assigned to variable t 

Str="$Str""$t""data.dat"

echo "$Str"

现在这个字符串Str的值如下所示

awk ' { print $1","$2" } ' data.dat

现在我们需要做的就是

eval $Str

这个解决方案对我来说非常好。