如何打印特定列的唯一值,然后在下一行中打印其余列

如何打印特定列的唯一值,然后在下一行中打印其余列

我想使用 awk 进行 tsv 文件处理,这是我的输入:

scaffold1   1   100 
scaffold1   101 200
scaffold1   201 300
scaffold2   1   100
scaffold2   201 500
scaffold3   10  500
scaffold4   10  300

期望输出:

Feature scaffold1
1   100
101 200
201 300
Feature scaffold2
1   100
01  500
Feature scaffold3
10  500
Feature scaffold4
10  300

我尝试使用 uniq 和 sort 以及 awk 使用命令打印第一列的 uniq awk '!seen[$1]++ Input.txt 但它打印第一列中的所有唯一值,然后我可以打印其余的列,但我想打印下一个中的第一个唯一值和其余列线,如上图所示。

请告诉我有办法做到这一点吗?

答案1

使用awk

awk '!seen[$1]++ {print "Feature",$1} {print $2,$3}' file
Feature scaffold1
1 100
101 200
201 300
Feature scaffold2
1 100
201 500
Feature scaffold3
10 500
Feature scaffold4
10 300

答案2

我已经通过使用 sed 和 awk 的组合进行了测试,并且效果很好

代码:


for o in `awk '{print $1}' example.txt| sort | uniq `; do sed -n "/$o/p" example.txt | sed "s/$o//g" |sed "1i Feature $o"; done  

输出


Feature  scaffold1
 1   100
  101 200
  201 300
Feature  scaffold2
  1   100
  201 500
Feature  scaffold3
  10  500
Feature  scaffold4
  10  300

相关内容