AWK 打印标题行并更改字段值

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=","

任何帮助将不胜感激

答案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

相关内容