Unix Awk更换不在工作状态;如果;陈述

Unix Awk更换不在工作状态;如果;陈述,unix,awk,Unix,Awk,我试图替换文件中的特定列,比如test.txt中的第三列 创建test.txt: echo“12-1”>test.txt echo“3 4+1”>>test.txt 如果我做一个简单的替换,它可以工作: awk'$3=“cows”test.txt 12头牛 34头母牛 但是,如果我使用条件来改变输出,我将一无所获: awk'{ 如果($3==“+1”) $3=“奶牛”; 否则,如果($3==“-1”) $3=“绵羊”; }'test.txt 我错过了什么?谢谢 Awk程序由条件和动作组成,

我试图替换文件中的特定列,比如
test.txt
中的第三列

创建
test.txt

echo“12-1”>test.txt
echo“3 4+1”>>test.txt
如果我做一个简单的替换,它可以工作:

awk'$3=“cows”test.txt
12头牛
34头母牛
但是,如果我使用条件来改变输出,我将一无所获:

awk'{
如果($3==“+1”)
$3=“奶牛”;
否则,如果($3==“-1”)
$3=“绵羊”;
}'test.txt

我错过了什么?谢谢

Awk程序由条件和动作组成,形式为
condition{action}

Awk有一个默认操作,即打印当前行

在第一个程序中,赋值是一个条件,而不是一个动作,因为没有大括号。因此,将执行默认操作


在第二个程序中,您定义了一个操作,该操作将替换默认操作。因此,
打印
不再执行,您必须自己执行。

你们说得对,下面是正确的格式

    awk '{
    if ($3 == "+1")
         $3="cows";
    else if ($3 == "-1")
         $3="sheep";
    print
    }' test.txt

打印
语句。您的输入使用
+1
。您的awk使用
1
。这能解释什么吗?谢谢你指出这个问题,约翰3136,我修好了。谢谢!这让我快发疯了。