CSV 파일의 열 수를 계산해야 합니다. 11개 미만인 경우 접미사를 추가하여 파일 이름을 바꿉니다 .bad
. 나는 이것을 시도했지만 내 요구 사항에 충분하지 않습니다.
head -1 myfile.csv | sed 's/[^,]//g' | wc -c
디렉토리의 모든 파일에 대해 이 작업을 수행해야 합니다.
답변1
for file in *.csv; do
cols=$( awk -F, 'NR == 1 {print NF; exit}' "$file" )
if [[ "$cols" -lt 11 ]]; then
mv -v "$file" "$file.bad"
fi
done
또는 awk 대신 bash를 사용하십시오.
for file in *.csv; do
IFS=, read -ra fields <"$file"
if [[ "${#fields[@]}" -lt 11 ]]; then
mv -v "$file" "$file.bad"
fi
done
답변2
또 다른 짧은 이야기awk
방법:
for f in *.csv; do
awk -F, '{ exit (NF < 11? 0:1) }' "$f" && mv "$f" "${f}.bad"
done
NF < 11?
- 필드 수가NF
다음보다 적은 경우11- 이 문은 이전 문이 다음을 반환
mv "$f" "${f}.bad"
하는 경우에만 (긍정적 평가로) 실행됩니다.awk
exit 0
답변3
perl
가지다이름을 바꿔라내장 기능(경고가 있으므로 설명서를 확인하세요)
perl -F, -ane '$f=$ARGV; $c=$#F+1; close ARGV; rename $f,"$f.bad" if $c<11' *.csv
-F,
필드 구분 기호 로 사용됩니다,
. 참조https://perldoc.perl.org/perlrun.html#Command 스위치다른 옵션에 대한 추가 정보$f=$ARGV
파일 이름 저장$c=$#F+1
열 수를 가져옵니다.close ARGV
파일 닫기rename $f,"$f.bad" if $c<11
열 수가 11개 미만인 경우 이름을 바꿉니다.