我正在用命令进行一些排序uniq -d
。它没有给我带来想要的结果。
我的文件是这样的:
>TCONS_00000066 174 206 33
>TCONS_00000066 210 281 72
>TCONS_00000066 227 316 90
>TCONS_00000066 285 338 54
>TCONS_00000066 335 373 39
>TCONS_00000066 342 377 36
>TCONS_00006042 493 552 60
>TCONS_00006042 562 606 45
>TCONS_00006042 630 686 57
>TCONS_00006042 622 699 78
>TCONS_00006042 614 724 111
>TCONS_00006042 696 767 72
我想删除第 1 列中的重复项
输出:
>TCONS_00000066
>TCONS_00006042
但我每次都会得到一个空白文件
uniq -d 文件 > 新文件
还有其他办法吗?
答案1
Uniq 不会排序,也不会删除该行的其余部分。uniq -d
只显示重复的行,这与每行显示一次不同(即-d
它必须出现两次,并且连续显示)
首先切掉不感兴趣的列,然后排序,然后找到唯一元素:
cut -d ' ' -f 1 your_file | sort | uniq
答案2
您可以使用 awk:
awk '!x[$1]++ { print $1 }' file
答案3
uniq -d
仅列出输入中的重复行;由于您的文件不包含重复行(整体考虑),因此它不会输出任何内容。
要获得您想要的结果,您需要提取第一列并进行过滤:
cut -d\ -f1 file | uniq
假设您的文件已排序(uniq
仅过滤重复的相邻行);否则
cut -d\ -f1 file | sort -u
awk
或者你可以按照指出的那样来做塔列津,有一个轻微的变体,仅输出第一列:
awk '!x[$1]++ { print $1 }' file