동일한 처음 두 문자로 시작하는 줄을 추출한 다음 별도의 파일로 출력하는 방법은 무엇입니까?

GetShorty

매우 큰 텍스트 목록이 있고 동일한 2 자로 시작하는 줄을 추출한 다음 해당 줄을 해당 2 자의 이름을 따서 명명 된 별도의 파일에 저장하는 방법이 필요합니다.

예시 목록 :

abWEye7kgw7  
abff34ZSrZf  
abke8mzMyma  
b2R5mPZGbCb  
b2zhhCeLZzZ  
b2q2T5rkACp  
k9ekzbc8nUh  
k9QzXBUrNT7  
k92RtdXntZ3  
vrTtR9GmbWG  
vraVM9QXWzY  
vrME9QnksBf  

원하는 출력 :

ab* > ab.txt  
b2* > b2.txt  
k9* > k9.txt  
vr* > vr.txt

목록은 다소 크고 처음 두 문자 조합이 많이 있습니다.

Kusalananda
$ awk '{ f = substr($0,1,2) ".txt"; print >f }' file.in

$ ls
ab.txt  b2.txt  file.in k9.txt  vr.txt

$ cat ab.txt
abWEye7kgw7
abff34ZSrZf
abke8mzMyma

이것은 분명히 쉘에서도 해결할 수 있지만 awk텍스트 파일을 구문 분석하는 데 더 적합합니다. substr()입력 파일의 각 행의 첫 번째 두 문자 아웃 상품과이를 변수에 할당 f.txt끝에 추가. print가 출력 이름에있는 파일의 현재 행 f.

f변수를 없애고 substr()바로 뒤에 표현식을 사용할 수 있다고 생각 >하지만 awkOpenBSD에서 사용 하는 구현 에서는 사용할 수 없습니다 (이는 버그 일 수 있음).


두 개의 첫 번째 문자의 서로 다른 조합 수가 너무 많으면 열린 파일이 너무 많은 문제가있을 수 있습니다.

다음 변형이이를 처리합니다.

awk '{ f = substr($0,1,2) ".txt"; print >>f; close(f) }' file.in

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관