간단한 파일 무결성 검사 스크립트를 작성하려고 합니다. ID, edname, 이름, 성, 접미사, 이메일을 포함하는 12개의 CSV 파일이 있는 디렉토리가 있습니다.
나는 첫 번째 필드에 숫자가 포함되어 있고 비어 있지 않은지 확인하기 위해 awk 스크립트를 작성하는 것을 좋아합니다. 필드 번호 3,4, 6은 비어 있지 않으며 파일에는 6개 이상의 6개 필드가 포함되어 있습니다. 이러한 조건이 모두 true이면 아무 일도 일어나지 않지만 그중 하나라도 실패하면 파일 이름이 .bad로 변경됩니다. . 이것이 내가 가지고 있는 것이지만 4,6열의 누락된 값을 가져오지 못합니다.
for f in *.csv; do
awk -F, '!(NF==6 && $1+0==$1 && $3$4$6!=""){f=1; exit} END{exit f}' "$f" || mv "$f" "$f".bad;
done
답변1
Steeldriver가 의견에서 지적했듯이 세 필드 중 하나라도 비어 있지 않으면 세 번째 테스트가 true가 됩니다. 나는 당신이 실제로 다음과 같은 것을 원한다고 가정합니다.
for f in *.csv; do
awk -F, '!(NF==6 && $1+0==$1 && $3!="" && $4!="" && $6!=""){f=1; exit}
END{exit f}' "$f" || mv "$f" "$f".bad;
done
답변2
비어 있지 않은지 확인하고 싶다면 문자열 비교를 수행할 필요가 없습니다. 빈 문자열은 false이므로 다음과 같습니다.
awk -F, 'BEGIN {flag=0} !(NF==6 && $1+0==$1 && $3 && $4 && $6) {flag=1} END {exit flag}'