如何删除整个文件中的双行,省略每行中的前n个字符?

时间:2014-02-25 15:21:17

标签: bash awk text-processing

我有以下数据格式:

123456786|data1
123456787|data2
123456788|data3

第一列是main_id。我需要从txt文件中删除所有重复的行,但省略main_id号。我怎么能这样做?

通常我使用这样的AWK脚本,但它找不到双行而没有省略:

awk '!x[$0]++' $2 > "$filename"_no_doublets.txt #remove doublets

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

如果您有更多列,则此行应该:

awk '{a=$0;sub(/[^|]*\|/,"",a)}!x[a]++' file

示例:

123456786|data1
12345676|data1
123456787|data2|foo
203948787|data2|foo
123456788|data3

kent$  awk '{a=$0;sub(/[^|]*\|/,"",a)}!x[a]++' f
123456786|data1
123456787|data2|foo
123456788|data3

答案 1 :(得分:3)

您可以使用:

awk -F'|' '!x[$2]++' 

这将仅根据|

分隔的字段2找到重复项

<强>更新

awk '{line=$0; sub(/^[^|]+\|/, "", line)} !found[line]++'

答案 2 :(得分:1)

awk '{key=$0; sub(/[^|]+/,"",key)} !seen[key]++' file