다음과 같은 테이블이 있습니다.
name something
1 100036498|F|0--20:T>G something
2 100036501|F|0--44:C>T something
3 100036501|F|0-44:C>T-44:C>T something
4 100036508|F|0--66:T>G something
5 100036508|F|0-66:T>G-66:T>G something
6 100036511|F|0-19:G>A-19:G>A something
7 100036516|F|0--15:T>G something
8 100036516|F|0-15:T>G-15:T>G something
... ....
내 문제를 더 쉽게 이해할 수 있도록 줄 번호를 추가했습니다. 2행과 3행, 4행과 5행, 7행과 8행 등 동일한 번호로 시작하는 행 쌍이 있습니다. 1행, 6행과 같이 고유한 행도 있습니다. 쌍이 있는 행만 유지하고 싶습니다. 즉, 쌍이 없는 행을 제거하여 다음과 같은 테이블을 만들고 싶습니다.
name something
2 100036501|F|0--44:C>T something
3 100036501|F|0-44:C>T-44:C>T something
4 100036508|F|0--66:T>G something
5 100036508|F|0-66:T>G-66:T>G something
7 100036516|F|0--15:T>G something
8 100036516|F|0-15:T>G-15:T>G something
... ....
나는 리눅스 명령과 비슷한 반대 명령을 원한다고유한첫 번째 열의 숫자만 고려되며 기호 뒤의 나머지 숫자는 고려되지 않습니다.|.
무엇을 해야할지 아시나요?
아래에는 공백으로 구분된 열이 있고 쉽게 복사할 수 있도록 헤더가 없는 동일한 첫 번째 테이블이 있습니다.
100036498|F|0--20:T>G something
100036501|F|0--44:C>T something
100036501|F|0-44:C>T-44:C>T something
100036508|F|0--66:T>G something
100036508|F|0-66:T>G-66:T>G something
100036511|F|0-19:G>A-19:G>A something
100036516|F|0--15:T>G something
100036516|F|0-15:T>G-15:T>G something
답변1
다음은 여러 번 반복되는 행을 유지하는 솔루션입니다 awk
. 행을 두 번만 반복하려면 다음 >1
으로 변경하세요.==2
awk -F'|' 'NR==FNR{s[$1]++;next} (s[$1]>1)' infile infile
100036501|F|0--44:C>T something
100036501|F|0-44:C>T-44:C>T something
100036508|F|0--66:T>G something
100036508|F|0-66:T>G-66:T>G something
100036516|F|0--15:T>G something
100036516|F|0-15:T>G-15:T>G something