sed - вставка запятой после каждой 4-й строки в текстовом файле - PullRequest
2 голосов
/ 23 августа 2011

Я пытаюсь вставить запятую после значений в строках 1, 4, 8 и т. Д., Используя sed,

sed '0-4 s/$/,/' in.txt > in2.txt

По какой-то причине это не работает, поэтому мне было интересно, есть ли у кого-нибудь какие-либо решения, делающие это с помощью awk, sed или любых других методов.

Я получаю ошибку

sed: 1: "0-4 s/$/,/": invalid command code -

В настоящее время мои данные выглядят так:

        City
        Address
        Zip Code
        County

и я пытался отформатировать это так

        City,
        Address
        Zip Code
        County

высоко ценится.

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

0-4 на самом деле не является правильно сформированным синтаксисом sed. Я бы использовал awk для этого, но это легко сделать с любым из них.

sed 's/$/,/;n;n;n' file

, которая подставляет одну строку и печатает ее, затем печатает следующие три строки без подстановки, а затем начинает заново с начала сценария; или

awk 'NR % 4 == 1 {sub(/$/,",")} {print}'

, который выполняет подстановку, если номер строки по модулю 4 равен 1, а затем печатает безоговорочно.

Режимы адресации Седа иногда немного разочаровывают; не существует стандартного способа вычисления смещений линий, относительно или в отношении, например, конец файла. Конечно, awk более сложный, но если вы можете узнать только одно или другое, определенно выберите awk. (Или в наши дни Python или Perl - гораздо более выгодное вложение.)

2 голосов
/ 14 сентября 2013

Это может сработать для вас (GNU sed):

sed '1~4s/$/,/' file
...