![특정 열의 고유값을 출력하고 나머지 열을 다음 줄에 출력하는 방법](https://linux55.com/image/124826/%ED%8A%B9%EC%A0%95%20%EC%97%B4%EC%9D%98%20%EA%B3%A0%EC%9C%A0%EA%B0%92%EC%9D%84%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B3%A0%20%EB%82%98%EB%A8%B8%EC%A7%80%20%EC%97%B4%EC%9D%84%20%EB%8B%A4%EC%9D%8C%20%EC%A4%84%EC%97%90%20%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
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