awk如何同时逐行扫描两个文件

awk如何同时逐行扫描两个文件,第1张

据我了解awk的处理机制是先逐行处理一个文件,结束后再处理后面的文件。没办法同时扫描两个文件的同一行,但是仍然可以实现你要的处理

如果两个文件有关联【比如处理后面的文件时,需要用到第一个文件卜樱相同行上的一些数据】可以用awk数组(类似词典)先将第一个文件的数据进行保存

区分第段此一、第二个文件的办法:

FNR==NR{#这是第一个文件,这里可以写保存数据的代码,比如data[FNR]=$0}

NR>FNR{#【或NR!=FNR】是第二个文件,可以在这里写数据握弊迅处理方式,比如print $0+data[FNR] }

实现你的需求其实不需要awk,使用

join

反而更简单;

join

-t'|'

-a1

a

b

一个命令搞定;简单解释一下,join可以连接有相同字段誉皮芦的文件,-t

指定分隔符为

‘|’,-a1

意思是左连接

a

文件;

使用这条命令得到的结果会和你要求的格式有一点小小的出入,表握虚现庆带在'|'的数量上,修正如下:

join

-t'|'

-a1

a

b

|

sed

-e

's/||/|/g'

|

sed

'/TCSI/!s/|$/&|/g'

会得到你要的结果

使用我提供的命令有一个前提:

PSID这个字段是排过序的,看你提供的样例应该是满足的;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12229903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存