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

标签 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.10 之前的 Perl 中

perl -lane 'print $F[0] unless $h{$F[0]}++' filename

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

关于perl - 有哪些单行语句可以将第 n 列的唯一元素输出到另一个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1276041/

相关文章:

bash - sed 提示 bash 脚本中的数字

linux - 如何设置永久别名

perl - 区分perl中的字符串和数字参数

perl - 如何使用 Perl DBI 在 Oracle 中超时 "select for update"

linux - 如何使用 awk 或 sed 将几行转置为列

bash - 如何使用 bash 命令剪切字符串

linux - awk中的多维数组

c - 如何从 SensorTag CC3200STK 读取数据

perl - 关于现有 perl 子程序的三个问题

bash - 按列消除部分重复行并保留最后一行