mv 접두사가 붙은 csv 파일이 여러 개 있습니다. 내 목표는 5개의 열(다른 열은 제외)이 포함된 파일에서 특정 열(이름 또는 번호)을 제거하는 것입니다.
for f in mv*.csv
do
ln= $(echo "$f" | awk '{print NF}' | sort -nu | head -n 1)
if [ln==4]
then
$(echo "$f" cut -d, -f2,4 --complement >> $f)
fi
done
세 번째 줄에서는 "명령을 찾을 수 없음" 오류가 발생하므로 "잘라내기" 부분을 테스트하지도 않았습니다. 내가 무엇을 놓치고 있나요?
추신 - bash를 더 잘 이해하기 위해 내 오류를 이해하고 싶지만 sed/awk/python/무엇이든 사용하는 솔루션도 좋을 것입니다.
감사해요
답변1
csvcut
다음에서 사용csvkit
:
$ csvcut -C 5 data.csv >data-new.csv
그러면 열 5가 제거되고 data.csv
결과가 data-new.csv
.
$ csvcut -C "comment" data.csv >data-new.csv
comment
그러면 이름이 지정된 열(파일의 헤더 행을 기준으로 함) 이 제거되고 data.csv
결과가 data-new.csv
.
답변2
파일 이름을 awk에 전달하지만 해당 내용은 전달되어야 합니다.
ln= $(cat "$f" | awk '{print NF}' | sort -nu | head -n 1)
또는 더 나은:
ln= $(awk '{print NF}' "$f" | sort -nu | head -n 1)