我有一个文件,其中的列由分隔符(在本例中为空格)分隔。
打印我使用的列,
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
测试.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
最佳答案
我想动态传递参数/变量值。我找到了一种方法来做到这一点。
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
这个解决方案对我来说非常有效。
关于linux - 如何将参数直接传递给 awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32450439/