Как заменить определенный символ в файле, только в строках, посчитав этот конкретный символ в строке? - PullRequest
0 голосов
/ 10 января 2019

Я бы хотел, чтобы удвоил 4-ую запятую в строках, считая 7, и только 7 запятых во всех CSV-файлах папки.

В этой командной строке я удваиваю 4-ю запятую:

sed  's/,/,,/4' Person_7.csv > new.csv

В этой командной строке я могу найти и посчитать все запятые в строке:

sed 's/[^,]//g' dat | awk '{ print length }'  

В этой командной строке я могу подсчитать и создать новый файл со строками, содержащими 7 запятых:

awk -F , 'NF == 7' <Person_test.csv >Person_7.csv

Но я не знаю, как выполнять конкретную работу ...

1 Ответ

0 голосов
/ 10 января 2019

Вам нужно что-то, чтобы выбрать только те строки, которые содержат ровно 7 запятых, а затем оперировать только этими строками. Вы можете сделать это с помощью sed:

sed '/^\([^,]*,\)\{7\}[^,]*$/s/,/&&/4'

где ^\([^,]*,\)\{7\}[^,]*$ определяет строку, содержащую ровно 7 запятых.

С awk все немного проще:

awk -F, -v OFS=, 'NF == 8 { $4 = $4 OFS } 1'

Это устанавливает разделители входного и выходного полей на ,, а затем для строк с 8 полями (7 запятыми) добавляет , в конец 4-го поля, удваивая запятую. Финал 1 обеспечивает печать каждой строки.

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