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