Удалить пустые колонки из CSV файл с bash-скрипт
ищет какой-то способ взглянуть на файл csv и удалить столбцы, включая заголовок, которые не имеют значений в последующих строках.
возможно, если бы я хотел удалить столбец Test03 снизу, включая Test03 в первой строке.
Test01,Test02,Test03,Test04
11,22,,44
11,22,,44
11,22,,44
11,22,,44
11,22,,44
11,22,,44
7 ответов
awk присоединяется к партии.
awk -F "," '{print ","","}' test.csv > new.csv
это требует программы, а не быстрой команды. Лучшим способом сделать это было бы, как предложил Эндрю медико, использовать правильный CSV-парсер (в случае perl
вы Text::CSV
).
однако, я думал, что напишу perl
скрипт, который работает в очень простых случаях:
perl -F, -lane 'if($.==1){@a=@F;next};for($i=0;$i<@F;$i++){if($F[$i]!=""){push @c,$F[$i];push @b,$i}}if(@a){foreach(@b){push @t,$a[$_]};print join(",",@t);undef @a}print join(",",@c);undef @c' file.csv
это сохраняет первую строку и идет дальше, чтобы увидеть, если есть какие-либо пустые поля в следующей строке. Затем он печатает только соответствующие заголовки, пропуская пустые поле во всех строках.
обратите внимание, что он не обрабатывает запятые внутри строк, заключенных в кавычки. Тем не менее, свою очередь:
Test01,Test02,Test03,Test04
11,22,,44
11,22,,44
11,22,,44
11,22,,44
11,22,,44
11,22,,44
в:
Test01,Test02,Test04
11,22,44
11,22,44
11,22,44
11,22,44
11,22,44
11,22,44
при попытке различных подходов Баш мне нужно удалить все пустые столбцы (включая заголовок) надежно. Для решения этой проблемы я использовал Python с панды.
import pandas as pd
data = pd.read_csv('test.csv', sep='\t')
data.dropna(axis=1).to_csv('test_clean.csv')
здесь важно добавить axis=1
сказать Панде применить dropna
к столбцам вместо строк.