awk-getline赋值重定向

本文介绍了如何在AWK脚本中高效地使用Shell命令,包括使用system函数执行命令及如何处理AWK变量。此外,还讲解了如何利用 getline 和文件重定向实现数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们经常会在awk中使用shell命令,或者是将AWK处理的字段例如$1,$2等进行处理,这种情况应该怎么在AWK中高效的实现呢?

1、如果我们想在AWK中使用shell命令的话,可以使用AWK中的system函数,此函数可以帮我们将想要执行的命令直接当shell命令来执行。

example

cat file

日期  卡号  姓名

2016  123   张三

2016  234   李武

2019  222   老李

awk'NR>1{system("echo hello")}1' file

日期  卡号  姓名

hello

2016  123   张三

hello

2016  234   李武

hello

2019  222   老李

上面的情况完全可以实现,但是如果我们要引用某个变量来进行操作的话,这种方法好像不太好实现

awk'NR>1{system("echo $2")}1' file

日期  卡号  姓名

 

2016  123   张三

 

2016  234   李武

 

2019  222   老李

此时输出的$2是空值

awk'NR>1{cmd="echo "$2"";cmd | getline b;print b}1' file

cmd | getline b代表的是将cmd通过管道输出给getline,然后在给变量b,这种方法可以实现赋值,另外还可以实现的方法是输入重定向

cat a

220 34 50 70

553 556 32 21

1 1 14 98 33

 

cat b

10

8

2

 

要求文件a的每行数据和文件b的相应的行的值相减,得到其绝对值

 

awk '{getlinej<"b";for(i=1;i<=NF;i++){$i>j?$i=$i-j:$i=j-$i}}1' a

此处的重定向代表的是将b中每行的数据赋值给b,然后就行操作

所以如果要进行赋值的话,如果是命令的话需要使用的是 cmd | getline var_name,如果是直接对文本中的行进行赋值的话 getlinevar<”file_name”,

具体的例子可以参考上面的两个example。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值