我想使用 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