TSV 파일 처리에 awk를 사용하고 싶습니다. 이것이 내 입력입니다.
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 명령을 사용하여 첫 번째 열을 인쇄하기 위해 uniq 및 sort 및 awk를 사용해 보았지만
awk '!seen[$1]++ Input.txt
첫 번째 열의 고유 값을 모두 인쇄한 다음 나머지 열을 인쇄할 수 있지만 첫 번째 고유 값을 인쇄하고 싶습니다. next 및 나머지 열 행은 위 그림과 같습니다.
이를 수행할 수 있는 방법이 있는지 알려주십시오.
답변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