다음은 파일의 텍스트입니다.
1NPD:A|PDBID|CHAIN|SEQUENCE MDVTAKYELIGLMAYPIRHSLSPEMQNKALEKAGLPFTYMAFEVDNDSFPGAIEGLKALKMRGTGVSMPNKQLACEYV
1NPD:B|PDBID|CHAIN|SEQUENCE MDVTAKYELIGLMAYPIRHSLSPEMQNKALEKAGLPFTYMAFEVDNDSFPGAIEGLKALKMRGTGVSMPNKQLACEYV
1NPY:A|PDBID|CHAIN|SEQUENCE MINKDTQLCMSLSGRPSNFGTTFHNYLYDKLGLNFIYKAFTTQDIEHAIKGVRALGIRGCAVSMPFKETCMPFLDEIH
1NPY:B|PDBID|CHAIN|SEQUENCE MINKDTQLCMSLSGRPSNFGTTFHNYLYDKLGLNFIYKAFTTQDIEHAIKGVRALGIRGCAVSMPFKETCMPFLDEIH
1NPY:C|PDBID|CHAIN|SEQUENCE MINKDTQLCMSLSGRPSNFGTTFHNYLYDKLGLNFIYKAFTTQDIEHAIKGVRALGIRGCAVSMPFKETCMPFLDEIH
1NPY:D|PDBID|CHAIN|SEQUENCE MINKDTQLCMSLSGRPSNFGTTFHNYLYDKLGLNFIYKAFTTQDIEHAIKGVRALGIRGCAVSMPFKETCMPFLDEIH
1NVT:A|PDBID|CHAIN|SEQUENCE GPLGSMINAKTKVIGLIGHPVEHSFSPIMHNAAFKDKGLNYVYVAFDVLPENLKYVIDGAKALGIVGFNVTIPHKIEI
1NVT:B|PDBID|CHAIN|SEQUENCE GPLGSMINAKTKVIGLIGHPVEHSFSPIMHNAAFKDKGLNYVYVAFDVLPENLKYVIDGAKALGIVGFNVTIPHKIEI
시작 부분의 공백을 제거하고 싶습니다. 탭도 있는 것 같아요. ID(예: 1NPD, 1NPY 등)만 유지하고 싶습니다. A, B, C 중 무엇이든 각 시퀀스에 대해 하나의 ID만 필요합니다.
이것이 내가 원하는 파일의 모습입니다.
1NPD
1NPY
1NVT
답변1
파일에서 처리할 텍스트가 있고 in.file
파일에 쓰려고 한다고 가정하면 out.file
다음을 사용할 수 있습니다.
tr -d ' ' < in.file | cut -d':' -f1 | sort -u > out.file
먼저 in.file에서 공백을 제거합니다.tr -d ' ' < in.file
두 번째는 ':'을 구분 기호로 사용하여 텍스트를 필드로 자르고 첫 번째 필드만 선택합니다.cut -d':' -f1
마지막으로 결과가 정렬되고 고유한 항목이 선택되어 out.file에 기록됩니다.sort -u > out.file
답변2
다음 셸 명령을 사용하세요.
sed 's/^[\t ]*//g' /tmp/data|awk -F : '{print $1}'|uniq|tr '\n' ' '
선행 탭과 공백을 제거하고, awk를 통해 첫 번째 열을 선택하고, 동일한 ID를 병합하고, tr을 사용하여 여러 줄을 하나로 변환하세요.
답변3
을 텐데awk
awk -F: '{sub("[ \t]+","",$1)}; !seen[$1]++ {print $1}' textfile
:
텍스트를 분리된 필드 로 분할- 첫 번째 필드에서 선행 공백 제거
$1
$1
잘린 내용을 처음 볼 때만 인쇄하세요.
답변4
단일 awk 명령으로
awk '{print substr($1,1,index($1,":")-1)}' in.file | sort -u
어디
- awk는 공백과 탭을 잘라냅니다
index($1,":")
:
위치 확인substr( )
하위 문자열 추출sort -u
독창성을 보장합니다