Это требует программы, а не быстрой команды. Наилучший способ сделать это, как предлагает Эндрю Медико, использовать правильный синтаксический анализатор 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