在 awk 语句中使用 sed

cbr*_*d97 5 awk sed

我想在仅以关键字开头的文件 roster.txt 的行上执行一系列 sed 命令。例如:

Employee : Kiara 20 hours@8.25
Employee : Connor 25 hours@8.00
Employee : Dylan 30 hours@9.00
Run Code Online (Sandbox Code Playgroud)

变成:

Employee : Kiara_20_hoursat8dot25
Employee : Connor_25_hoursat8dot00
Employee : Dylan_30_hoursat9dot00
Run Code Online (Sandbox Code Playgroud)

我知道进行更改的 sed 命令我只是想要一种在以“employee”开头的行上执行它们的方法。也许

awk '$1 == "Employee" {sed -i -e 's/\./dot/g' roster.txt}' roster.txt
Run Code Online (Sandbox Code Playgroud)

Sun*_*eep 6

$ cat roster.txt
foo : bar@baz.123
Employee : Kiara 20 hours@8.25
Employee : Connor 25 hours@8.00
Employee : Dylan 30 hours@9.00

$ awk 'BEGIN{FS=OFS=" : "} $1=="Employee"{gsub(/ /,"_",$2); gsub(/@/,"at",$2); gsub(/\./,"dot",$2)} 1' roster.txt
foo : bar@baz.123
Employee : Kiara_20_hoursat8dot25
Employee : Connor_25_hoursat8dot00
Employee : Dylan_30_hoursat9dot00
Run Code Online (Sandbox Code Playgroud)

awk也支持替换命令 -sub替换第一次出现和gsub替换所有出现。还允许仅更改特定字段

  • BEGIN{FS=OFS=" : "}使用 : 输入/输出字段分隔符
  • gsub(/ /,"_",$2)_仅用于第二个字段替换所有空格
  • 同样根据需要进行其他替换
  • 1 在命令末尾是打印行的惯用方式,包括所做的任何更改
  • 另请参阅awk 将修改保存到位