텍스트 파일의 첫 번째 열을 인쇄하고 그 안에 각 행을 추가하는 방법은 무엇입니까?

텍스트 파일의 첫 번째 열을 인쇄하고 그 안에 각 행을 추가하는 방법은 무엇입니까?

다음은 파일의 텍스트입니다.

                   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독창성을 보장합니다

관련 정보