我有一个包含多行字段(来自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编辑器(或其他应用程序)执行此操作?
答案 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|
请注意尾随|
,如果这确实是个问题,您可以在事后编辑此内容