특정 열의 고유값을 출력하고 나머지 열을 다음 줄에 출력하는 방법

특정 열의 고유값을 출력하고 나머지 열을 다음 줄에 출력하는 방법

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

관련 정보