If statement 使用if-else语句将单词替换为awk

If statement 使用if-else语句将单词替换为awk,if-statement,awk,If Statement,Awk,我试图用if-else语句替换awk中的一个单词 下面是我已经尝试过的。基本上,如果第三个单词是“Normal”,则将其更改为0,否则将其更改为1 awk -F "," '{(if $3=='Normal') {$3=0}; else {$3=1} }' filename 您需要一个适当的if-else条件,然后是一个触发器来打印行: awk '{if ($3=="Normal") {$3=0} else {$3=1}}1' file 这里,1作为一个真实条件,它触发了awk的默认行为,包括

我试图用if-else语句替换awk中的一个单词

下面是我已经尝试过的。基本上,如果第三个单词是“Normal”,则将其更改为0,否则将其更改为1

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

您需要一个适当的
if-else
条件,然后是一个触发器来打印行:

awk '{if ($3=="Normal") {$3=0} else {$3=1}}1' file
这里,
1
作为一个真实条件,它触发了
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

你的方法有什么问题?
  • 您正在使用
    {(如果条件){action};else{action}
    。这有几个问题:
    • if
      中的条件是括号内的条件:
      if(条件)
      而不是
      (if条件)
    • 你说
      (如果条件){action}
      ,然后说
      。有了这个分号,
      if
      -语句就完成了,下一个动作也将被执行。所以只要把它放下,说
      if(condition){…}else{…}
      ,而不用这个
      在<代码>其他
      之前
    • 您在
      $3=='Normal'
      中使用单引号。这将关闭awk语句,因此无法正确解释,因此需要使用双引号:
      $3==“Normal”
  • 缺少打印的
    文件
    ,无法打印该行

如果我希望4美元在3美元的基础上变为0,这可能吗?我已经尝试添加{$4=($3='Normal')?0:1}0,但它没有改变$4@adrianwhite注意,您需要使用双引号。请显示您正在运行的确切命令,因为在最后一个
}
之后的
0
也是可疑的。awk'BEGIN{FS=OFS=“,”}{$3=($3=“Normal”)?0:1}1{$4=($3=“Normal”)?0:1}0file@adrianwhite只需放下
0
并说
awk'BEGIN{FS=OFS=“,”}{$3=($3=“Normal”)尽管使用
awk'BEGIN{FS=OFS=“,”}{if($3=“Normal”){$3=0;$4=0}或者{$3=1;$4=1}}}1'文件
可能更容易阅读,但是0:1}{$4=“Normal”){$3=0;$4=0}。
awk -F "," '{(if $3=='Normal') {$3=0}; else {$3=1} }' filename