У меня большой файл .csv, в котором я должен удалить пустые столбцы. Под пустым я имею в виду, что у них есть заголовок, но остальная часть столбца не содержит данных.
Я написал сценарий Bash, чтобы попытаться это сделать, но столкнулся с несколькими проблемами. Вот код:
#!/bin/bash
total="$(head -n 1 Reddit-cleaner.csv | grep -o ',' | wc -l)"
i=1
count=0
while [ $i -le $total ]; do
cat Reddit-cleaner.csv | cut -d "," -f$i | while read CMD; do if [ -n CMD ]; then count=$count+1; fi; done
if [ $count -eq 1 ]; then
cut -d "," -f$i --complement <Reddit-cleaner.csv >Reddit-cleanerer.csv
fi
count=0
i=$i+1
done
Сначала я нахожу количество столбцов и сохраняю их в сумме. Тогда, пока программа не дошла до последнего столбца, я oop через столбцы по отдельности. Вложенный в то время как l oop проверяет, является ли каждая строка в столбце пустой, и если есть не одна строка, которая не является пустой, она записывает все остальные столбцы в другой файл.
Я распознаю, что есть несколько проблем с этим скриптом. Во-первых, изменение количества происходит в подоболочке, поэтому количество никогда не изменяется в родительской оболочке. Во-вторых, файл, в который я пишу, будет перезаписываться каждый раз, когда сценарий находит пустой столбец.
Поэтому мой вопрос заключается в том, как я могу это исправить. Первоначально я хотел получить его так, чтобы он записывал в новый файл столбец за столбцом, основываясь на подсчете, но также не мог понять, как это сделать.
Редактировать: Люди спрашивали образец ввода и вывод.
Sample input:
User, Date, Email, Administrator, Posts, Comments
a, 20201719, a@a.com, Yes, , 3
b, 20182817, b@b.com, No, , 4
c, 20191618, , No, , 4
d, 20190126, , No, , 2
Sample output:
User, Data, Email, Administrator, Comments
a, 20201719, a@a.com, Yes, 3
b, 20182817, b@b.com, No, 4
c, 20191618, , No, 4
d, 20190126, , No, 2
В примере вывода столбец, в котором нет данных, кроме заголовка (сообщения), был удален, а столбцы, которые полностью или частично заполнены, остаются.