我正在尝试使用if else语句替换awk中的单词。
以下是我已经尝试过的内容。基本上,如果第三个单词是"正常",则将其更改为0,否则将其更改为1.
awk -F "," '{(if $3=='Normal') {$3=0}; else {$3=1} }' filename
答案 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
打印行。