매우 큰 텍스트 목록이 있고 동일한 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
목록은 다소 크고 처음 두 문자 조합이 많이 있습니다.
$ 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()
바로 뒤에 표현식을 사용할 수 있다고 생각 >
하지만 awk
OpenBSD에서 사용 하는 구현 에서는 사용할 수 없습니다 (이는 버그 일 수 있음).
두 개의 첫 번째 문자의 서로 다른 조합 수가 너무 많으면 열린 파일이 너무 많은 문제가있을 수 있습니다.
다음 변형이이를 처리합니다.
awk '{ f = substr($0,1,2) ".txt"; print >>f; close(f) }' file.in
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다