в системе Unix, замените строку в файле с переменной позиции - PullRequest
1 голос
/ 15 сентября 2011

Я работаю на Unix-сервере.
У меня есть много CSV-файлов, содержащих, помимо прочего, поля даты.

Я должен заменить некоторые поля этой даты другим значением, например, от 20110915 до 20110815 . Их положение варьируется от файла к другому.

Проблема в том, что подстановка зависит от поля позиции. Например, если в моем файле есть строка, подобная этой:

blablabla; 12; 0,2121; 20110915 ; 20110915; 19951231; popopo; другой текст; 321; 20101010

Я должен заменить только первые поля даты, а не другие, преобразуя строку в:

blablabla; 12; 0,2121; 20110815 ; 20110915; 19951231; popopo; другой текст; 321; 20101010

Есть ли способ ограничить замену в файле, используя некоторые ограничения?

Спасибо

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Вы можете попробовать awk:

awk  'BEGIN {FS=";";OFS=";"} {if($4=="20110915")$4="20110815"; print}' input.csv

Как это работает:

FS и OFS определяют разделители полей ввода и вывода. Сравнивает четвертое поле ($ 4) с 20110915. Если он совпадает, он изменяется на 20110815. Затем строка печатается.

0 голосов
/ 17 марта 2013

Вот альтернативный вариант использования gsub в awk:

awk 'BEGIN {FS=";";OFS=";"} {gsub(/20110915/,20110815,$4); print}' input.csv

Вот метод, если вам нужно заменить в диапазоне полей / столбцов (например, 4-4):

awk 'BEGIN {FS=";";OFS=";"} {for(i=4;i<=4;i++){gsub(/20110915/,20110815,$i)}; print}' input.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...