是否有办法在Linux上按栏目进行 “uniq”

是否有办法在Linux上按栏目进行 “uniq”

简介

在Linux操作系统中, “uniq “ 命令被用来从一个排序的文件中删除重复的行。然而,有时你可能需要根据特定的列,而不是整个行来删除重复的内容。当处理基于列的输入文件,如 CSV 文件时,这变得特别有用。在这篇文章中,我们将探讨在Linux上按列进行 ” uniq ‘ing “的几种方法。

方法1:使用sort命令

sort 命令是一种简单而有效的方法,可以按特定字段对行进行排序,并从排序结果中删除重复的内容。对于重复的数据,只有第一个实例会被保留。在本节中,我们将探讨如何使用 sort 命令来解决删除特定列中重复条目的问题。

  • 使用 tail 命令删除标题行’
$ tail -n+2 price.csv | sort -u -t, -k1,1                        
Keybord,20,2019-02-02
Monitor,218,2019-01-01
Wireless Mouse,25,2019-02-02

前面的命令使用 tail 命令删除文件的第一行,这通常是标题行,并将文件的其余部分传送给sort命令。然后, sort 命令使用-u选项对各行进行排序并删除重复的内容。选项’ -t ‘ 用于设置字段分隔符为逗号,选项’-k1,1′ 用于按第一列排序。

  • 在输出中保持标题行
$ head -n1 price.csv && tail -n+2 price.csv | sort -u -t, -k1,1 
Product,Price,Update
Keybord,20,2019-02-02
Monitor,218,2019-01-01
Wireless Mouse,25,2019-02-02

这个命令与前面的命令类似,但使用 head 命令打印文件的第一行,通常是标题行,然后再使用tail命令删除标题行,并对文件的其他部分进行排序。

方法2:使用awk命令

另一种按列执行 ” uniq “操作的方法是使用 awk 命令。 awk 是一个强大的文字处理工具,可以用来选择和操作文件中的特定列。对于按列进行的 ” uniq “,我们可以使用以下命令’

$ awk -F, 'NR==1 || !a[$1]++' price.csv 
Product,Price,Update
Monitor,218,2019-01-01
Keybord,20,2019-02-02
Wireless Mouse,25,2019-02-02

上面的命令使用 awk 命令,用’-F’选项将字段分隔符设为逗号。表达式’NR==1’用来处理标题行,它被打印在输出上。表达式’!a[1]++’用于删除第一列中的重复条目,为第一列中的每个唯一条目创建一个关联数组元素,忽略任何重复的条目。

方法3:使用带-f选项的uniq命令

在Linux上对每一列进行 ” uniq “的第三种方法是使用带有’-f’选项的uniq命令。选项’-f’可以用来在比较行之前忽略指定的字段数量。对于 “按列 uniq “,我们可以使用以下命令’

$ sort file.txt | uniq -f 0

这个命令将对文件 “file.txt “进行排序,然后使用带有’-f’选项的uniq命令,在比较行之前忽略第一个字段(列)。这样,uniq命令在删除重复内容时只考虑第二个及以后的字段,有效地按列进行 ” uniqing “。

总结

在这篇文章中,我们讨论了在Linux上按列运行uniqing的三种不同方法。第一种方法使用 sort 命令,第二种方法使用 awk 命令,第三种方法使用带有’ -f ‘选项的 uniq 命令。每种方法都可以用来选择和删除文件中某一列的重复值。方法的选择将取决于企业的具体要求和用户的偏好。值得注意的是,这里讨论的所有方法都需要对输入文件进行排序,所以建议在使用这些命令之前对文件进行排序。同样重要的是,这里所有的例子都使用逗号作为字段分隔符,如果你的文件有不同的分隔符,请相应调整命令。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程