AWK распечатать строку заголовка и изменить значение поля

Я пытаюсь изменить город во всех записях и сохранить заголовок.

Что у меня есть:

Name,City,State
Bob,Portland,Oregon
Sue,Portland,Oregon
David,Portland,Oregon

Что я хочу:

Name,City,State
Bob,Bend,Oregon
Sue,Bend,Oregon
David,Bend,Oregon

Что я пробовал:

awk -F',' 'NR>1 $2 == "Portland" {$2 = "Bend";print}' OFS=","

Любая помощь будет принята с благодарностью [ 117]

1
задан 31 May 2019 в 20:08

1 ответ

Попробуйте:

$ awk -F',' 'NR>1 && $2 == "Portland" {$2 = "Bend"} {print}' OFS="," file
Name,City,State
Bob,Bend,Oregon
Sue,Bend,Oregon
David,Bend,Oregon

или, используя обычную стенографию awk:

awk -F',' 'NR>1 && $2 == "Portland" {$2 = "Bend"} 1' OFS="," file

Примечания:

  1. Если у вас два условия подобно тому, как NR>1 и $2 == "Portland", и вы хотите применить оба, их нужно объединить с логическими и: &&.

  2. Вы хотите, чтобы все строки были напечатаны, и awk не печатается по умолчанию. Итак, мы переместили команду печати в отдельную группу, чтобы она применялась ко всем строкам.

Альтернатива: использование sed

Используя sed, мы можем получить тот же результат:

$ sed 's/,Portland,/,Bend,/' file
Name,City,State
Bob,Bend,Oregon
Sue,Bend,Oregon
David,Bend,Oregon
0
ответ дан 31 May 2019 в 20:08

Другие вопросы по тегам:

Похожие вопросы: