탭으로 구분된 .txt 파일이 있고 첫 번째 열에서 중복 행을 제거하고 싶습니다. 정렬 없이 이 작업을 수행할 수 있다면 정말 좋겠지만 정렬을 사용해야 한다는 사실을 받아들였습니다. 정렬을 사용하면 제목을 정렬할 수 없으므로 제목이 맨 위에 있어야 합니다.
테스트 데이터 세트(탭으로 구분):
Symbol ATCACGACAGACAGGT.1 ATCACGACAGCCTATA.1 TTTGTCATCATGTCTT.1
STPG1 0 1 3
NFYA 0 0 1
STPG1 1 3 1
ABD 0 0 0
ABC 0 0 0
내 꿈의 결과물:
Symbol ATCACGACAGACAGGT.1 ATCACGACAGCCTATA.1 TTTGTCATCATGTCTT.1
STPG1 0 1 3
NFYA 0 0 1
ABD 0 0 0
ABC 0 0 0
내 차선책 :
Symbol ATCACGACAGACAGGT.1 ATCACGACAGCCTATA.1 TTTGTCATCATGTCTT.1
ABC 0 0 0
ABD 0 0 0
NFYA 0 0 1
STPG1 0 1 3
쉼표로 구분된 테스트 예제 testc.txt에서 다음 코드를 사용했지만 헤더는 여전히 정렬 중입니다. 유효한 탭 구분 기호를 할당하는 방법을 찾을 수 없는 것 같습니다. 또한 이 코드의 헤더에 문제가 있습니다.
sort -u -t, -k1,1 testc.txt
실제 데이터 세트에 행, 열 또는 행 이름이 몇 개 있는지 모른다는 점을 분명히 해야 할 것 같습니다.
답변1
여기서 사용할 수 있습니다 awk
:
$ awk -F'\t' 'NR==1 || !seen[$1]++' ip.txt
Symbol ATCACGACAGACAGGT.1 ATCACGACAGCCTATA.1 TTTGTCATCATGTCTT.1
STPG1 0 1 3
NFYA 0 0 1
ABD 0 0 0
ABC 0 0 0
-F'\t'
탭 문자를 구분 기호로 지정NR==1
헤더를 유지합니다(주어진 입력의 경우 필수는 아니지만) - NR은 현재 줄 번호를 갖는 특수 변수입니다.!seen[$1]++
여기서seen
배열은 첫 번째 필드를 키로 사용하고 값이 0이면(키가 처음 표시될 때) 조건이 true가 됩니다.