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]

 

 

posted @ 2013-10-21 22:28  lottu  阅读(261)  评论(0)    收藏  举报