哪些单行可以将第n列的唯一元素输出到另一个文件?

时间:2009-08-14 04:30:59

标签: perl sed awk grep unique

我有一个这样的文件:

1 2 3 
4 5 6
7 6 8
9 6 3
4 4 4

哪些单行可以将第n列的唯一元素输出到另一个文件?

编辑:以下是人们提供的解决方案列表。谢谢你们!

cat in.txt | cut -d' ' -f 3 | sort -u
cut -c 1 t.txt | sort -u
awk '{ print $2 }' cols.txt | uniq
perl -anE 'say $F[0] unless $h{$F[0]}++' filename

5 个答案:

答案 0 :(得分:10)

5.10

之前的Perl中
perl -lane 'print $F[0] unless $h{$F[0]}++' filename

5.10

之后的Perl中
perl -anE 'say $F[0] unless $h{$F[0]}++' filename

0替换为您要输出的列。

对于j_random_hacker,这里的实现将使用非常少的内存(但速度较慢,需要更多输入):

perl -lane 'BEGIN {dbmopen %h, "/tmp/$$", 0600; unlink "/tmp/$$.db" } print $F[0] unless $h{$F[0]}++' filename

dbmopenDBM文件(它创建或打开)和名为%h的哈希之间创建一个接口。存储在%h中的任何内容都将存储在光盘而不是内存中。使用unlink删除文件可确保文件在程序完成后不会停留,但对当前进程没有影响(因为根据POSIX规则,文件系统将打开的文件句柄视为真实文件) 。

答案 1 :(得分:6)

更正:谢谢Mark Rushakoff。

$ cut -c 1 t.txt | sort | uniq

$ cut -c 1 t.txt | sort -u


1
4
7
9

答案 2 :(得分:3)

取第三列的唯一值:

$ cat in.txt | cut -d' ' -f 3 | sort -u
3
4
6
8

cut -d' '表示用空格分隔输入,-f 3部分表示取第三个字段。最后,sort -u对输出进行排序,仅保留唯一条目。

答案 3 :(得分:3)

假设您的文件是“cols.txt”,并且您想要第二列的唯一元素:

awk '{ print $2 }' cols.txt | uniq

您可能会发现以下文章对于了解有关此类实用程序的更多信息非常有用:

答案 4 :(得分:2)

如果使用awk,则无需使用其他命令

awk '!_[$2]++{print $2}' file