有时我需要覆盖文件中的某些值。
例如,我的表是:
Name;Town;ID
Michal;Vienna;123456
Yasmin;Krakow;12345
Sarlote;Prague;1234
Karol;Budapest;12348
我需要将Sarlote ID从1234
更改为4321
。
我使用了以下awk命令:
awk -v h="1234" -v new_value="4321" 'BEGIN {FS = ";"} $1 ~ h $3=new_value}1' OFS=';' file >> file1 && mv file1 file
但输出是:
Name;Town;ID
Michal;Vienna;4321
Yasmin;Krakow;4321
Sarlote;Prague;4321
Karol;Budapest;4321
但我想只更改Sarlote
ID。
答案 0 :(得分:0)
看起来你只需要:
$ awk -v name="Sarlote" -v newId=4321 'BEGIN{FS=OFS=";"} $1==name{$3=newId} 1' file
Name;Town;ID
Michal;Vienna;123456
Yasmin;Krakow;12345
Sarlote;Prague;4321
Karol;Budapest;12348
但如果您确实需要测试旧ID,那么您只需添加该变量和条件:
$ awk -v name="Sarlote" -v oldId=1234 -v newId=4321 'BEGIN{FS=OFS=";"} ($1==name) && ($3==oldId) {$3=newId} 1' file
Name;Town;ID
Michal;Vienna;123456
Yasmin;Krakow;12345
Sarlote;Prague;4321
Karol;Budapest;12348