加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:44:37 所属栏目:安全 来源:网络整理
导读:假设我有一个名为input.csv的CSV输入文件: 1,2,3,valueIWantToPrint3,5,valueIWantToPrint 我目前需要使用awk打印该输入的每一行的最后一个元素,这可以通过字段分隔符和NF变量轻松完成: awk -F"," '{print $NF}' input.csv 但现在让我们说我想创建我想要打
假设我有一个名为input.csv的CSV输入文件:

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

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

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

但现在让我们说我想创建我想要打印变量的字段,因为稍后输入格式可能会改变,它将是一个不同的字段.

输入文件:

1,valueIWantToPrint,3
3,2

脚本:

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

好的,这很容易.但是现在为了使其尽可能灵活,我希望能够将FIELD_TO_PRINT设置为相当于NF,这样我就可以打印最后一个值而不管字段数量.我所追求的是这样的:

输入:

1,7,23,1,6,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读