awk处理案例十五--移除多个文件中相同的行
【场景】
比如说我有3个文件 a.txt b.txt c.txt 他们的行数相同
其中c.txt中有一些是空行,我想把c.txt中的这些空行删掉,同时对应的a.txt和b.txt的这些行数也要去掉
请问应该怎么做呢??
【代码】
awk 'FNR==NR{if(! NF) a[FNR]=1;else print > FILENAME;next}{if(! a[FNR]) print>FILENAME}' c a b
【解析】
FNR:awk内置变量;当前文件已读的行数。
NR:已读的行数。
NF: 域的个数;空行则为0
FILENAME:当前读的文件名字
对C文件;存在空行;就用数组记录下行号(a[FNR]=1);等到了读文件a,b时就不打印出来!
【拓展】
这个是yestreenstars兄的代码
awk 'NR==FNR{if(/^$/)a[NR];else print > FILENAME;next}!(FNR in a){print > FILENAME}' c a b
他的思路跟我差不多;唯一不一样的是后面的判断语句不一样;FNR in a ;是一个判断下标是否在该数组a中!当然我的代码也可以换成这样;但这里可以换成a[FNR]

浙公网安备 33010602011771号