尝试从命令行中获取更多信息:
我有一个文件:
CHR25 1192279 Y Exonic NA exon 2 [1/1] 1192145 1192322
CHR25 1192279 Y Exonic NA CDS 2 [1/1] 1192145 1192322
CHR25 1739394 Y Exonic NA CDS 2 [1/2] 1739294 1739456
我希望根据第2列获得独特的行。我已经完成了
cat file | cut -f 2 | uniq > grepfile
但我不确定如何使用grep -f
每行获得一个匹配,就像我之前一样。使用-m1 or | head -n 1
仅提供第一个匹配行。我希望第一行匹配'grepfile'中的每一行。
期待答案=)
答案 0 :(得分:6)
这个awk命令的工作原理是构建一个已经看过的第二个字段值的关联数组。
awk '!s[$2]++'
关联数组称为s
。该表达式查找$ 2(输入行的第二列)并应用一个postincrement,它将在第一次调用时返回0,之后返回非零值。然后我反转它,第一次看到每个$ 2产生1,然后每次产生0。如果选择表达式为真,则awk的默认操作是打印。
当线数大到足以再次回到0时,请注意。
答案 1 :(得分:2)
这也可以:
sort -u -k2,2 file
,并提供:
CHR25 1192279 Y Exonic NA exon 2 [1/1] 1192145 1192322
CHR25 1739394 Y Exonic NA CDS 2 [1/2] 1739294 1739456
-u
调用uniq
,-k2,2
表示排序字段2(仅限字段2),可以在排序man page上看到。
答案 2 :(得分:0)
如果Perl没问题,你可以这样做:
perl -nale '$h{$F[1]}=$_ if(!$h{$F[1]});END{print $h{$_}for(keys(%h));}' file
答案 3 :(得分:0)
因为uniq只查看相邻的行,并且排序会更改顺序。你需要更多的代码。
cat -n input-file | sort --key=3,3 --unique | sort | cut -f2- >output-file
cat -n
添加序列号。sort --key=3,3 --unique
删除字段2上的重复项。注意:由于cat -n
,密钥编号高一个。sort
按原始顺序退回。cut -f2-
获取序列号的数据。