awk取代不工作"如果"声明

时间:2016-08-18 00:26:12

标签: unix awk

我试图替换文件中的特定列,让我们说test.txt中的第三列。

创建test.txt

echo "1 2 -1" > test.txt
echo "3 4 +1" >> test.txt

如果我做一个简单的替换,它可以工作:

awk '$3="cows"' test.txt

1 2 cows
3 4 cows

但是,如果我使用条件来改变输出,我什么也得不到:

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

我在这里缺少什么?谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

在您的第一个程序中,分配是条件,而不是操作,因为没有花括号。因此,执行默认操作。

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

答案 1 :(得分:0)

你们是对的,这是正确的格式。

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