Удалить пустые колонки из 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  
5
задан user1988900
источник

7 ответов

в данном случае можно просто сделать:

sed 's/,,/,/g' test.csv > new.csv

это заменит все двойные запятые только на одну, фактически удалив пустой столбец. Обратите внимание, что столбец необходимо удалить из заголовка самостоятельно.

0
отвечен Priit 2014-05-07 08:12:08
источник

Если вы хотите удалить, возможно, непустые столбцы (в том числе в заголовке), используйте команду "вырезать":

cut -d , -f 1,2,4 test.csv > new.csv
0
отвечен gogators 2014-05-07 17:24:52
источник
  • если повторяющиеся пустые столбцы ,,,.
  • если пробелы в Столбцах 1, , ,,2 (start with/in middle/at the end).
  • If it's empty at first or end of a line ,123/123,
sed -E ':l;s/,[[:blank:]]*,/,/;tl;s/^[[:blank:]]*,|,[[:blank:]]*$//g'
0
отвечен devWeek 2017-10-20 07:55:03
источник

awk присоединяется к партии.

awk -F "," '{print ","","}' test.csv > new.csv
0
отвечен chingNotCHing 2017-10-20 09:29:28
источник

это требует программы, а не быстрой команды. Лучшим способом сделать это было бы, как предложил Эндрю медико, использовать правильный 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
0
отвечен simlev 2017-10-27 11:11:54
источник

при попытке различных подходов Баш мне нужно удалить все пустые столбцы (включая заголовок) надежно. Для решения этой проблемы я использовал 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 к столбцам вместо строк.

0
отвечен Gawin 2018-08-03 08:41:54
источник

для обычного пользователя проще всего импортировать данные в Excel из этого CSV-файла и экспортировать их еще раз после удаления столбца.

0
отвечен pbies 2018-11-04 17:53:07
источник

Другие вопросы bash csv linux