awk如何处理2个文件

处理两个文件时,形式如下:

awk 'BEGIN{} {} END{}' file1 file2

 

那么如何判断处理的是哪个文件呢?答案是用NR变量和FNR变量。NR变量随着读取的行数从1递增,FNR也递增,但是,遇到新文件时又回到1。所以,如果NR==FNR,就说明是第一个文件,如果NR!=FNR,就说明是第二个文件。

 

【1】NR与FNR的区别。

文件1:

us.txt

s2002408030068:$1$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:12676:0:99999:7:::
s2002408032819:$1$UAvNbHza$481Arvk1FmixCP6ZBDWHh0:12676:0:99999:7:::
s2002408032823:$1$U2eJ3oO1$bG.eKO8Zupe0TnyFhWX9Y.:12676:0:99999:7:::

文件2:ps1.txt

s2002408030068:x:527:527::/home/dz02/s2002408030068:/bin/pw
s2002408032819:x:528:528::/home/dz02/s2002408032819:/bin/pw
s2002408032823:x:529:529::/home/dz02/s2002408032823:/bin/pw

 

【2】利用awk将us.txt的$2替换为ps1.txt的$2:

 

【3】在【2】中,两个文件的分隔符都是冒号,但是,假如两个文件的分隔符不同呢?想到两个解决方法:

(1)假如一个文件的分隔符为冒号,另一个的分隔符是空格,那么就将冒号和空格都设为分隔符!

 

 这样有一个条件,就是,两个不能交叉!看下面:

文件1:

abc:bcd   yxz:123

文件2:

abc:xyz

也就是说,文件1既有冒号又有空格,我们希望$2="bcd  yxz"提出来,但是此时$2="bcd"。

当然,解决方法还是有的,就是$2和$3一起拿出来处理。回到刚才的例子,很简单,就是原来的第2字段,现在变成了第3字段:

 

(2)将其中一个文件的分隔符替换,使两个文件的分隔符统一!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值