如果某个字段的条目以特定字母开头,则将一个字段替换为其他字段

如果某个字段的条目以特定字母开头,则将一个字段替换为其他字段

如果我有一个类似的文件:

223 898 teeth
223 899 mouth
223 900 r9
445 800 round

我的问题是如何使用 awk 命令将第 2 列替换为第 3 列,仅适用于第 3 列以字母“r”开头的行?对于替换,我可以使用 gsub,但我无法仅获取第三列以“r”开头的行。

我还尝试使用 grep 查找以 r 开头的单词:

grep "r*" filename | awk '{gsub($2,$3); print;}'

但此命令将第 2 列替换为该行的所有列。

答案1

尝试:

$ awk '$3 ~ /^r/ {$2 = $3}1' file
223 898 teeth
223 899 mouth
223 r9 r9
445 round round

这将搜索和打印合并到一个awk命令中,而不必使用grep& awk。上面$3 ~ /^r/只会找到第三个字段以 开头的行r。在这些情况下,awk将用第 3 场代替第 2 场。

如果尾随1让你感到困惑,它正在执行以下操作。它评估为 true 导致awk执行其默认操作{ print $0 }

参考

相关内容