CSV 열 개수 및 삭제

CSV 열 개수 및 삭제

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)

관련 정보