首页 > 解决方案 > 如何在 Linux 中删除具有 n 列的相等行

问题描述

我有一个包含 3045 行和 900.000 列的文件(df.txt),但有 145 个重复行,因此:

 1234  1111122233330000000000003333311122222............................
    1235678 00000000000000000000000111111122222............................
    4567  1122222222222222222222223333333333333............................
    3456  111111111111111122222222222222222222............................
    1234 1111122233330000000000003333311122222............................
    1235678 00000000000000000000000111111122222............................
    3423 33333333300000000011111112222222222222............................
    2211 11111111111111111111111111111111111111............................

因此,新文件 (dffinal.txt) 在第 1 列中不应有重复信息,如:

 1234  1111122233330000000000003333311122222............................
    1235678 00000000000000000000000111111122222............................
    4567  1122222222222222222222223333333333333............................
    3456  111111111111111122222222222222222222............................
    3423 33333333300000000011111112222222222222............................
    2211 11111111111111111111111111111111111111............................

我尝试

cat df.txt | sort |uniq > dffinal.txt 

但它保持相同的行数

标签: linuxcatuniq

解决方案


您可以使用awk检查第 1 列中的重复项。

awk '!a[$1] { a[$1]++; print }' df.txt > dffinal.txt

这会记住数组中的第一列a。如果该列尚不存在,则将其保存并打印该行。所以它打印任何重复键的第一个实例。


推荐阅读