gpt4 book ai didi

bash - 如何从最后一个字段作为变量的bash调用awk

转载 作者:行者123 更新时间:2023-11-29 09:21:04 25 4
gpt4 key购买 nike

假设我有一个名为 input.csv 的 CSV 输入文件:

1,2,3,valueIWantToPrint
3,5,2,valueIWantToPrint

我目前需要使用 awk 打印该输入的每一行的最后一个元素,这可以使用字段分隔符和 NF 变量轻松完成:

awk -F"," '{print $NF}' input.csv

但是现在假设我想将要打印的字段设置为变量,因为稍后输入格式可能会发生变化,它将是一个不同的字段。

输入文件:

1,2,valueIWantToPrint,3
3,5,valueIWantToPrint,2

脚本:

FIELD_TO_PRINT=3
awk -F"," -v fieldToPrint=FIELD_TO_PRINT '{print $fieldToPrint}' input.csv

好的,这很简单。但是现在为了让它尽可能灵活,我希望能够将 FIELD_TO_PRINT 设置为 NF 的等价物,这样我就可以打印最后一个值,而不管字段的数量。我所追求的是这样的:

输入:

1,2,3,7,2,5,23,1,3,6,valueIWantToPrint
3,5,2,6,3,valueIWantToPrint

这个脚本不起作用,但说明了我正在努力完成的事情:

FIELD_TO_PRINT=NF
awk -F"," -v fieldToPrint=FIELD_TO_PRINT '{print $fieldToPrint}' input.csv

有没有一种方便的方法来设置一个变量来表示“记录中的最后一个字段”?这个例子很简单,但 FIELD_TO_PRINT 变量最终会被放在一个单独的配置文件中,awk 脚本会更大更复杂。因此,有一个好的方法来实现这一点将非常有用。

最佳答案

你可以使用这种迂回的方式:

负数n表示NF:

n=-1
awk -F, -v n="$n" '{print (n<0 ? $NF : $n)}' f.csv

valueIWantToPrint
valueIWantToPrint

n > 0 打印编号字段时:

n=3
awk -F, -v n="$n" '{print (n<0 ? $NF : $n)}' f.csv

3
2

关于bash - 如何从最后一个字段作为变量的bash调用awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50748513/

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