首页 > 解决方案 > 使用 Awk 对文本文件进行重复数据删除,但保留非空字段的行

问题描述

我正在尝试使用 Awk 对文本文件的行进行重复数据删除,但更喜欢使用非空字段“f4”保留重复的行(除非所有这些重复的行都有一个空白字段“f4”)。

输入文件

f1|f2|f3|f4|f5
aa|bb|cc||ee
aa|bb|cc|dd|ee
aa|bb|cc|dd|ee
aa|bb|cc||ee
aaa|qq|ccc||eee
aaa|qq|ccc|zz|eee
aaa|qq|ccc|zz|eee
aaa|qq|ccc||eee
aaa|qq|ccc||eee
new|test|ccc||eee
new|test|ccc||eee

需要的输出

f2|f4
bb|dd
qq|zz
test|

代码尝试(不工作 - 得到错误的输出):

awk ' BEGIN { FS=OFS="|" }
{ if ( !seen[$2, $3]++ ) print $2, $4 } '   Input_File

错误的输出

f2|f4
bb|
qq|
test|

标签: awk

解决方案


你可以做:

awk 'BEGIN{FS=OFS="|"}
     $4 {print $2,$4}' file

添加去重逻辑:

awk 'BEGIN{FS=OFS="|"}
     $4 && seen[$2]++<1 {print $2,$4}' file

推荐阅读