使用Awk删除文本文件中的重复数据,但保留带有非空字段的行
我尝试使用Awk删除文本文件的行,但更喜欢使用非空字段“f4”保留重复行(除非所有这些重复行都有空字段“f4”) 输入文件使用Awk删除文本文件中的重复数据,但保留带有非空字段的行,awk,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||e
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|
已尝试代码(不工作-输出错误):
错误输出
f2|f4
bb|
qq|
test|
编辑:因为OP更改了问题,所以现在添加新答案。这将检查第二个字段是否有第四个字段,如果有,将打印其唯一值,或者如果所有出现的字段都没有第四个字段,则将打印空字段
awk '
BEGIN{
FS=OFS="|"
}
FNR==NR{
if(!a[$2]){
a[$2]=$4
}
next
}
($2 in a) && $4==a[$2]{
print $2,$4
delete a[$2]
}' Input_file Input_file
输出如下
f2|f4
bb|dd
qq|zz
test|
你能试试下面的吗
awk 'BEGIN{FS=OFS="|"} $2 && $4{print $2,$4}' Input_file
如果第2和第4字段均为非空,则上面将检查第2和第4字段,然后它将打印行,如果您只想检查第4字段,则将上面更改为:
awk 'BEGIN{FS=OFS="|"} $4{print $2,$4}' Input_file
如果您想删除重复项并检查第4列是否存在,请使用以下命令
awk 'BEGIN{FS=OFS="|"} $4 && !a[$4]++{print $2,$4}' Input_file
你可以做:
awk 'BEGIN{FS=OFS="|"}
$4 {print $2,$4}' file
要添加重复数据消除逻辑,请执行以下操作:
awk 'BEGIN{FS=OFS="|"}
$4 && seen[$2]++<1 {print $2,$4}' file
awk'BEGIN{FS=OFS=“|”}
$4&&SEED[$2]++能否请您详细说明为什么您的示例输出中有test |
?它的第四个字段为空。您的编辑使这成为一个根本不同的问题。现在,需要读取和处理整个文件,而不是逐行。@Steve_A,我们始终建议将您的要求以单发形式发布,以后添加条件并不好,因为这可能会浪费我们的努力。@Steve_A,请检查我的编辑答案,然后让我知道好吗?
awk 'BEGIN{FS=OFS="|"}
$4 && seen[$2]++<1 {print $2,$4}' file