使用if else语句用awk替换单词

时间:2017-02-22 11:37:24

标签: if-statement awk

我正在尝试使用if else语句替换awk中的单词。

以下是我已经尝试过的内容。基本上,如果第三个单词是"正常",则将其更改为0,否则将其更改为1.

awk -F "," '{(if $3=='Normal') {$3=0}; else {$3=1} }' filename

1 个答案:

答案 0 :(得分:2)

您需要一个正确的if - else条件,然后使用触发器打印该行:

awk '{if ($3=="Normal") {$3=0} else {$3=1}}1' file

此处,1充当True条件,触发awk的默认行为,包括打印当前行。

您可以使用三元运算符:

awk '{$3=($3=="Normal") ? 0 : 1}1' file

另请注意,您正在处理, - 分隔字段,因此您需要在之后保留它们。为此,请使用OFS(输出字段分隔符)。一起来:

awk 'BEGIN{FS=OFS=","} {$3=($3=="Normal") ? 0 : 1}1' file

给出这样的示例文件:

$ cat a
hello,how,are,you
i,am,Normal,buuu

这将返回:

$ awk 'BEGIN{FS=OFS=","} {$3=($3=="Normal") ? 0 : 1}1' a
hello,how,1,you
i,am,0,buuu

您的方法出了什么问题?

awk -F "," '{(if $3=='Normal') {$3=0}; else {$3=1} }' filename
  • 您正在使用{(if condition) {action}; else {action}}。这有几个问题:
    • if中的条件是括号内的条件:if (condition)而不是(if condition)
    • 您说(if condition) {action}然后;。使用这个分号,if - 语句将完成,并且无论如何都将执行下一个操作。所以,只需将if (condition) {...} else {...}放在;之前else。{/ 1}}
    • 您在$3=='Normal'中使用单引号。这是关闭awk语句,因此无法正确解释,因此您需要使用双引号:$3=="Normal"
  • 缺少print打印行。