Быстрый и грязный трюк с вашей текущей командой:
(cat file.csv | tr -d ' \t\n\r' | tr '|' '\n' |sed "s/.$//" > file2.csv && mv file2.csv file.csv)
Пояснения:
Добавление && mv file2.csv file csv
к вашей команде вызовет операцию перемещения, если и толькоесли первая команда завершилась успешно.
При этом ваша текущая команда должна быть упрощена !!!Пример: избегайте использования cat
и pipe
, когда вы можете перенаправить stdin
(tr -d ' \t\n\r' < file.csv | tr '|' '\n' |sed "s/.$//" > file2.csv && mv file2.csv file.csv)
После редактирования позвольте мне представить вам встроенную команду, которая изменит файл напрямую, без создания какого-либо промежуточного файла, дляДля этой цели я использую sed
Ввод:
$ more file.csv
330000, 200000, , , xbdcb, rrrrrr, N,
N, 2018-06-14,N,|,
330000, 200000, , , xbdcb, rrrrrr, N,
N, 2018-06-14,N,|,
330000, 200000, , , xbdcb, rrrrrr, N,
N, 2018-06-14,N,|,
330000, 200000, , , xbdcb, rrrrrr, N,
N, 2018-06-14,N,|,
Команда:
$ sed -n -i.bak 'h;n;H;n;x;s/[\n ]//g;s/,|,$//;p' file.csv
Отредактированный файл:
$ more file.csv
330000,200000,,,xbdcb,rrrrrr,N,N,2018-06-14,N
330000,200000,,,xbdcb,rrrrrr,N,N,2018-06-14,N
330000,200000,,,xbdcb,rrrrrr,N,N,2018-06-14,N
330000,200000,,,xbdcb,rrrrrr,N,N,2018-06-14,N
Пояснения:
-n
используется для отключения печати по умолчанию sed -i.bak
- это изменение файла в строке и получение файла резервной копии .bak
, если вы уверены, что измените его на -i
, sed непосредственно изменит файл без создания резервной копии h;n;
-> h
поместите содержимое текущей строки в буфер удержания и перейдите к следующей строке n
H;n;
-> H
добавьте текущую строку в буфер удержания иперейти к следующей строке x;
заменить буфер шаблонов и буфер удержания, чтобы выполнить модификацию и распечатать ее s/[\n ]//g
удаление всех пробелов и EOL из буфера шаблонов s/,|,$//
удаление ,|,
в конце строки p
печать буфера шаблонов
И последнее, но не менее важное: если у вас больше пустых строк, чем показано в вашем примере, используйте:
$ sed -n -i.bak '/^ *$/!{h;n;H;x;s/[\n ]//g;s/,|,$//;p}' file.csv