awk - 在 awk 语句中使用 sed

标签 awk sed

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

Employee : Kiara 20 hours@8.25
Employee : Connor 25 hours@8.00
Employee : Dylan 30 hours@9.00

变成:
Employee : Kiara_20_hoursat8dot25
Employee : Connor_25_hoursat8dot00
Employee : Dylan_30_hoursat9dot00

我知道进行更改的 sed 命令我只是想要一种在以“employee”开头的行上执行它们的方法。也许
awk '$1 == "Employee" {sed -i -e 's/\./dot/g' roster.txt}' roster.txt

最佳答案

$ 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
awk也支持替换命令 - sub替换第一次出现和 gsub替换所有出现的。还允许仅更改特定字段
  • BEGIN{FS=OFS=" : "}使用 : 作为输入/输出字段分隔符
  • gsub(/ /,"_",$2)_ 替换所有空格仅用于第二个字段
  • 同样根据需要进行其他替换
  • 1在命令末尾是打印行的惯用方式,包括所做的任何更改
  • 另见 awk save modifications in place
  • 关于awk - 在 awk 语句中使用 sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45571233/

    相关文章:

    bash - 如何在 bash 中对数组进行排序并获取唯一值?

    windows - 如何在 Cygwin 命令行上将 Windows 路径格式化为 Unix 路径

    regex - 在 sed 中替换/删除匹配字符串中的特殊字符

    linux - 从制表符分隔的文件中删除重复的单词/字符串

    sed - “sed”命令在 PBS 脚本中无法正常工作

    regex - AWK 正则表达式中的行尾符号

    awk - 在 IPv4 地址匹配后使用 SED 删除冒号到行尾

    awk - 替换子字符串中的引号(最好没有外部依赖项)

    bash - 用不同文件中的列替换文件中的列,同时保留格式

    sed - 用文件内容替换/替换模式