gpt4 book ai didi

bash - 打印作为变量传递的字段列表

转载 作者:行者123 更新时间:2023-11-29 08:59:11 24 4
gpt4 key购买 nike

我有一个文件a.txt,下面是它的内容:

bob 1 100            
lincoln 2 200
chris 3 300

文件内容以空格分隔。

使用 awk,我可以访问每一列。使用下面的命令打印以逗号分隔的第一列和第三列:

cat a.txt | awk ' { print $1","$3} '

我成功了。

现在我想从另一个 shell 脚本动态传递条件。我所说的标准是指 - $1","$3

我尝试了下面的命令,但没有用。

myvar="$1"   
awk -v a="$myvar" ' { print a } ' a.txt

但这是打印 $1 3 次,因为 a.txt 中有三行。

如何以这种方式将字段列表传递给 awk?

最佳答案

这里的问题是您传递给 awk 的变量中的 $ 是按字面解释的 - 它不能用于指代特定字段。

对于单个字段,您可以使用如下内容:

awk -v field=1 '{ print $field }' file
bob
lincoln
chris

对于多个字段,这有点复杂:

awk -v fields="1 3" 'BEGIN{ n = split(fields,f) }
{ for (i=1; i<=n; ++i) printf "%s%s", $f[i], (i<n?OFS:ORS) }' file
bob 100
lincoln 200
chris 300

字段列表作为一个字符串传递,它被拆分成一个数组。然后循环遍历数组,使用 printf 输出每个字段,后跟输出字段分隔符 OFS 或输出记录分隔符 ORS,取决于它是否是最后一个字段。要用逗号分隔字段,您可以将 -v OFS=, 作为选项传递。

关于bash - 打印作为变量传递的字段列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32396788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com