조건에 따라 파일의 열에 대한 빈 레코드 수를 계산하려고 합니다. 하지만 여건이 좋지 않습니다.
- 입력 예: 고정 너비 파일,
761128424607/22/20197611284246CAD052020DHH 0073578EKLAVY3
ELEKBAFXXL7900271761128424406/22/20197611284244CAD042020DKA 0038244EDITTU8
761128424606/22/20197611284246CAD052020DHH 0073578EKLAVY3
ELEKBAFXXL7900271761128424406/22/20197611284244CAD042020DKA 0038244EDITTU8
- 암호
RE='[[:space:]]{17}' awk -v m=1 -v p=17 -v r='&& substr($0,28,2)==06' $'BEGIN{re = ENVIRON["RE"]}{c = substr($0,m,p)} c ~ "^(" re ")$" r {N++} END {print N+0}' < input_file.txt
- 원하는 출력:
1
, 파일의 레코드 2개가 비어 있고 레코드 1개가 조건을 만족하기 때문입니다.substr($0,28,2)==06
- 실제 출력:
0
, 이는 잘못된 것입니다.
ベストアンサー1
이것은 쉘 변수의 내용을 해석하기 위해 호출되기 전에 awk 스크립트의 일부로 확장함으로써 r
요구하는 작업을 수행 하지만 실제로 원하는 작업을 수행하는 더 나은 방법이 거의 확실합니다 awk
.
$ r='&& substr($0,28,2)=="06"'
$ RE='[[:space:]]{17}' awk -v m=1 -v p=17 '
BEGIN { re = ENVIRON["RE"] }
{ c = substr($0,m,p) }
c ~ "^(" re ")$" '"$r"' { N++ }
END { print N+0 }
' file
1
어딘가에 작성 해야 한다면 && substr($0,28,2)=="06"
쉘 변수 대신 awk 스크립트로 작성하지 않는 이유가 전혀 명확하지 않습니다. 원하는 것이 무엇이든 더 나은 방법이 있어야 합니다.