我试图替换文件中的特定列,让我们说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
我在这里缺少什么?谢谢!
答案 0 :(得分:2)
Awk程序由条件和操作组成,格式为condition { action }
。
Awk有一个默认操作,即打印当前行。
在您的第一个程序中,分配是条件,而不是操作,因为没有花括号。因此,执行默认操作。
在第二个程序中,您已定义了一个操作,该操作将替换默认操作。因此,print
不再执行,您必须自己完成。
答案 1 :(得分:0)
你们是对的,这是正确的格式。
awk '{
if ($3 == "+1")
$3="cows";
else if ($3 == "-1")
$3="sheep";
print
}' test.txt