Вы должны использовать временный файл, как в
cut -d, --complement -f$i file-tmp.csv > tmp.csv && mv tmp.csv file-tmp.csv
for var in $(cut -d, -f$i file-tmp.csv)
глючит: вы не сможете обнаружить пустую строку, как эта, потому что разделение слов просто пропустит ее.
Во-первых, вы можете избежать всех копий файлов, отслеживая столбцы, которые хотите отбросить, а затем отбросить их все в одном go:
for i in {1..65}; do
if grep -q '^$' <(cut -d, -f "$i" file-original.csv); then
drop+=("$i")
fi
done
cut -d, --complement -f "$(IFS=,; echo "${drop[*]}")" file-original.csv \
> file-tmp.csv
. grep, чтобы увидеть, содержит ли столбец пустую строку, избегая медленной l oop и ошибки разделения слов.
После for для l oop массив drop
содержит все номера столбцов, которые мы хотим отбрасывать, и $(IFS=,; echo "${drop[*]}")
печатает их в виде списка через запятую.