На самом деле, ваш последний столбец вообще не пропущен.Вы просто не видите это, потому что это вкладка.Вы можете проверить это с помощью xxd
.
Кроме того, вам не нужно экранировать запятые и двойные кавычки в sed, поскольку все внутри одинарных кавычек.
sed 's/","/"\t"/g; s/,,/\t""\t/g;' $YOUR_CSV | xxd | tail -1.
Это показывает, что последняя строка заканчивается табуляцией (x09
) после последней кавычки и перед завершающим символом новой строки:
00000090: 3834 2209 2237 3822 0922 2209 0a 84"."78".""..
Что пропущено, так это двойные кавычки вокруг этого последнего пустого значения.Но они вам не нужны.Если вы действительно хотите эти двойные кавычки, вы можете добавить это к вашей команде sed:
s/\t$/\t""/
Она заменит вкладку в конце строки на вкладку, за которой следуют 2 двойные кавычки.
Однако эта простая подстановка sed
может, конечно, легко потерпеть неудачу в зависимости от ваших данных.
Например (при использовании -
вместо \t
для видимости), если у вас есть пустые столбцы, которыене в конце:
echo '"Nation","88",,,"84","78",,' | sed 's/","/"-"/g; s/,,/-""-/g;'
Будет выводить
"Nation"-"88"-""-,"84"-"78"-""-
(обратите внимание на запятую перед "84")
Поэтому я бы предложил использовать специальный инструмент, а нечем быстрая линия сед.Например, csvtool
доступно в большинстве дистрибутивов (sudo apt install csvtool
для Debian).
csvtool -t COMMA -u TAB cat $YOUR_CSV