sed编辑器:如何删除除文本文件中我想要的所有字段

时间:2015-04-09 16:42:04

标签: sed

我有一个包含多行字段(来自FIX协议)的文件,如下所示:

35=V|311=123|515=ABC|825=BBB|9803=AKEFP Oct 12|55=1
35=V|311=456|515=CDE|825=CCC|9803=BUF Nov|55=33|66=8

我需要删除除311和9803之外的所有字段,因此对于我想要接收的上述行:

311=123|9803=AKEFP Oct 12
311=456|9803=BUF Nov

如何使用sed编辑器(或其他应用程序)执行此操作?

1 个答案:

答案 0 :(得分:1)

如果您的数据格式非常一致并且始终具有相同数量的列,您可以使用awk

轻松完成
awk -F'|' '{print $2 "|" $5}' file.dat

此命令将记录分隔符设置为|,然后打印每行的第二个和第五个记录。如果数据文件的结构不一致且实际上您必须进行模式匹配,则可以使用以下更复杂的awk表达式

awk -F'|' '/311|9803/{for(i=1;i<=NF;++i){if($i~/311|9803/)printf "%s|", $i} printf "\n"}' file.dat

这将输出

311=123|9803=AKEFP Oct 12|
311=456|9803=BUF Nov|

请注意尾随|,如果这确实是个问题,您可以在事后编辑此内容