Bash: Как добавить символ в конце строки, если он не существует? - PullRequest
0 голосов
/ 08 февраля 2019

Предположим, у меня был следующий текст в CSV-файле:

454,'steve',3434
123,'john',3454,
2343,'mike',5757

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

Конечный результат должен быть

454,'steve',3434,'2018-10-12'
123,'john',3454,'2018-10-12'
2343,'mike',5757,'2018-10-12'

Как этого добиться, используя bash?

Ответы [ 5 ]

0 голосов
/ 08 февраля 2019

Использование Perl

 perl -pe " s/(,)?$/,'2018-10-12'/ "

с входами:

$ cat pollpenn.txt
454,'steve',3434
123,'john',3454,
2343,'mike',5757
$  perl -pe " s/(,)?$/,'2018-10-12'/ " pollpenn.txt
454,'steve',3434,'2018-10-12'
123,'john',3454,'2018-10-12'
2343,'mike',5757,'2018-10-12'
$
0 голосов
/ 08 февраля 2019

Вы можете использовать Perl

Сначала замените все ', \ n' на '\ n', а затем замените все '\ n' на ', \ n'.

perl -pe 's/,\n/\n/g' file.txt | perl -pe 's/\n/, 2018-10-12\n/g'

454, «Стив», 3434, 2018-10-12

123, «Джон», 3454, 2018-10-12

2343, «Майк»5757, 2018-10-12

0 голосов
/ 08 февраля 2019

Предполагая, что поля csv не содержат запятых, как насчет:

awk -F, -v OFS=, -v q=\' '{$NF==""? p=NF: p=NF+1; $p=q"2018-10-12"q; print}' file.csv

Не требуется жестко кодировать номера столбцов.

0 голосов
/ 08 февраля 2019

awk позаботится об этом.

$ awk -F, -v OFS=, -v d="'2018-10-12'" '{$4=d}1' file

454,'steve',3434,'2018-10-12'
123,'john',3454,'2018-10-12'
2343,'mike',5757,'2018-10-12'

, так как мы знаем, что дата не пуста, вы можете сыграть в гольф до

$ awk -F, -v OFS=, -v d="'2018-10-12'" '$4=d' file
0 голосов
/ 08 февраля 2019

Вы можете использовать это sed:

sed "s/,\{0,1\}$/,'2018-10-12'/" file

454,'steve',3434,'2018-10-12'
123,'john',3454,'2018-10-12'
2343,'mike',5757,'2018-10-12'

Шаблон регулярного выражения ,*$ соответствует 0 или более запятым в конце и заменяется данной строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...