使用awk进行文本筛选和排序

今天碰到这样一个需求:“有一个竖线分隔的多列多行文本,需要显示某几列,并按指定顺序显示”,研究了好久,终于给折腾出来了,awk果然是相当强大。

awk ‘{FS=”|”}{OFS=”|”}{print $5,$4,$1}’ 20100109.txt | sed ‘$s/|//g’

其中用到的awk参数的用途如下:

FS:指定输入文件的分隔符。
OFS:指定输出时的分隔符。
%5,$4,$1:依次显示原文件中的第5、第4、第1列。

因为输入文件的最后一行是一行减号(-),前面用awk以后会在后面加好几个竖线(|),所以用sed把竖线(|)去除

sed ‘$s/|//g’

“$”指最后一行;“s/|//g”指替换竖线(|)为空,s是搜索,g是替换