각 열의 이름이 여러 번 반복되는 열이 있는 파일이 있습니다. 동일한 이름의 다른 반복과 인접하지 않은 동일한 이름의 다른 반복을 유지하면서 각 반복을 하나로 압축하고 싶습니다.
예를 들어 왼쪽을 오른쪽으로 돌리고 싶습니다.
Golgb1 Golgb1
Golgb1 Akna
Golgb1 Spata20
Golgb1 Golgb1
Golgb1 Akna
Akna
Akna
Akna
Spata20
Spata20
Spata20
Golgb1
Golgb1
Golgb1
Akna
Akna
Akna
이것이 내가 사용한 것입니다. perl -ne 'print if ++$k{$_}==1' file.txt > file2.txt
그러나 이 접근 방식은 왼쪽에서 한 담당자만 유지합니다(즉, Golb1과 Akna는 중복되지 않습니다).
인접하지 않은 여러 블록에서 반복되는 이름을 유지하면서 각 블록의 고유한 이름을 유지하는 방법이 있습니까?
답변1
uniq
당신을 위해 이 일을 해줄 것입니다:
$ uniq inputfile
Golgb1
Akna
Spata20
Golgb1
Akna
답변2
Awk
해결책:
awk '$1 != name{ print }{ name = $1 }' file.txt
산출:
Golgb1
Akna
Spata20
Golgb1
Akna
답변3
이것을 시도하십시오 - 이전 행을 저장하고 현재 행과 비교하십시오
$ perl -ne 'print if $p ne $_; $p=$_' ip.txt
Golgb1
Akna
Spata20
Golgb1
Akna
uniq
또한 태그됨 - 시도해 보셨나요?
$ uniq ip.txt
Golgb1
Akna
Spata20
Golgb1
Akna
답변4
Rakesh Sharma의 sed 솔루션에 대한 질문입니다.
다음과 같은 입력 파일이 있는 경우:
-126.1 48.206
-126.106 48.21
-126.11 48.212
-126.114 48.214
-126.116 48.216
-126.118 48.216
-126.128 48.222
-126.136 48.226
출력 파일은 다음과 같습니다.
-126.1 48.206
-126.106 48.21
-126.11 48.212
-126.114 48.214
-126.116 48.216
-126.128 48.222
-126.136 48.226
누락된 사항에 유의하세요.
-126.118 48.216
내가 원하는 명령이 귀하의 솔루션과 유사하다는 것을 알고 있습니다.
sed -e '$!N;/^\(.*\)\n\1$/!P;D' input_file
두 개의 열을 인쇄하려면 올바른 방법으로 변경할 수 있는 방법이 없으며, 이 특별한 방법으로 열 2의 값만 정렬할 수 있습니다. 어떤 팁이 있나요?