linux - 如何将参数直接传递给 awk

标签 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

测试.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/

相关文章:

java - Commons VFS 和 Java.net.URL - 添加对 "sftp://"协议(protocol)的支持

linux - 使用少于 n 的文件回显 ls 命令的输出

linux - 使用 Dockerfile 重新加载 .bashrc

bash - 理解(多重和自动)文件名引用

bash - 执行使用混合引号和星号的动态 shell 脚本命令

mysql - 如何使用 linux bash 脚本检查 mysql 表中的 tinyint 列值是真还是假?

c++ - Linux ioctl -> 如何判断当前 IP 是否由 dhcp 获取

Linux - 修改文件修改/访问/更改时间

linux - 复制特定字符前面的输出(:*:) from each line in a list using Notepad++ or in linux

java - Shell 排序最坏情况时间复杂度