如果我有一个类似的文件:
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 }
。