![AWK는 레코드를 인쇄하여 파일을 열별로 구분하고 비어 있는 경우 열을 값으로 바꿉니다.](https://linux55.com/image/129050/AWK%EB%8A%94%20%EB%A0%88%EC%BD%94%EB%93%9C%EB%A5%BC%20%EC%9D%B8%EC%87%84%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%97%B4%EB%B3%84%EB%A1%9C%20%EA%B5%AC%EB%B6%84%ED%95%98%EA%B3%A0%20%EB%B9%84%EC%96%B4%20%EC%9E%88%EB%8A%94%20%EA%B2%BD%EC%9A%B0%20%EC%97%B4%EC%9D%84%20%EA%B0%92%EC%9C%BC%EB%A1%9C%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
큰 파일을 첫 번째 열 값으로 나누고 해당 열이 Null인 경우 Null 값을 값으로 바꾸고 해당 오류 레코드에서 파일을 만들어야 합니다. 나는 다음과 같은 것을 시도했습니다
awk -F'|' '{print match($1,/^ /) > $1 : "BAD"} $FILENAME
그러나 물론 그것은 작동하지 않습니다.
A|123|zxy
B|321|zyx
|345|abc
A|456|zys
3개 파일 생성: A
, B
및BAD
답변1
awk -F '|' '{ fname = $1 ? $1 : "BAD"; print >fname }' file
fname
변수가 있으면 첫 번째 열의 값으로 설정되고 , 그렇지 않으면 로 설정됩니다 BAD
. 그러면 해당 파일 이름으로 행이 인쇄됩니다.
당신이 가지고 있다면많은첫 번째 열의 값이 다른 경우 print
파일 설명자가 부족해지는 것을 방지하기 위해 각 명령문 사이의 출력 파일을 닫아야 할 수도 있습니다.
awk -F '|' '{ fname = $1 ? $1 : "BAD"; print >>fname; close fname }' file
이제 파일을 추가 모드로 열어야 한다는 점에 유의하세요 >>
.