awk不';不打印简单字段

awk不';不打印简单字段,awk,Awk,这里有一个小awk脚本 > # cat zzz.awk FS=" " /fruit/ { fr = $2; print $fr; } 应用于此数据文件 > # cat data.dat fruit apple 1 3 fruit mango 4 9 vegetable tomato 6 5 fruit orange 9 8 vegetable potato 1 4 ,生成此输出: > # awk -f zzz.awk data.dat fruit apple 1

这里有一个小awk脚本

> # cat zzz.awk
FS=" "
/fruit/ { fr = $2; print $fr; }
应用于此数据文件

> # cat data.dat

fruit apple 1 3
fruit mango 4 9
vegetable tomato 6 5
fruit orange 9 8
vegetable potato 1 4
,生成此输出:

> # awk   -f zzz.awk   data.dat

fruit apple 1 3
fruit apple 1 3
fruit mango 4 9
fruit mango 4 9
vegetable tomato 6 5
fruit orange 9 8
fruit orange 9 8
vegetable potato 1 4
为什么它不产生预期的输出呢

apple
mango
orange
,以及如何更正脚本

(当前版本为GNU Awk 3.1.7,即使首选便携式解决方案。)

谢谢。

试试下面的内容

echo "fruit apple 1 3
fruit apple 1 3
fruit mango 4 9
fruit mango 4 9
vegetable tomato 6 5
fruit orange 9 8
fruit orange 9 8
vegetable potato 1 4" |awk '{print $2}' | uniq
试着跟随

echo "fruit apple 1 3
fruit apple 1 3
fruit mango 4 9
fruit mango 4 9
vegetable tomato 6 5
fruit orange 9 8
fruit orange 9 8
vegetable potato 1 4" |awk '{print $2}' | uniq

所有awk脚本都由共享相同结构的部分组成:

PATTERN { CODE }
你的没有。使用特殊模式
BEGIN
在开始时做你想做的事情。此外,
awk
中的变量不强制使用
$
符号<代码>$2是
$2
,但
fr
只是
fr

BEGIN { FS=" " }
/fruit/ { fr = $2; print fr; }
当然,您可以这样做:

awk -F' ' '$1=="fruit"{print $2}' data.dat

所有awk脚本都由共享相同结构的部分组成:

PATTERN { CODE }
你的没有。使用特殊模式
BEGIN
在开始时做你想做的事情。此外,
awk
中的变量不强制使用
$
符号<代码>$2是
$2
,但
fr
只是
fr

BEGIN { FS=" " }
/fruit/ { fr = $2; print fr; }
当然,您可以这样做:

awk -F' ' '$1=="fruit"{print $2}' data.dat

嗯,那个awk完全错了。例如,
FS
不能这样设置,它将输出每条记录:

$ awk 'FS=" "' file
fruit apple 1 3
fruit mango 4 9
vegetable tomato 6 5
fruit orange 9 8
vegetable potato 1 4
使用:

接下来,在awk中不要将变量引用为
$fr
(除非这是您想要的)。计算结果为
$0
,您将打印整个记录,以解释输出中的重复记录。因此,总结一下:

$ awk '
BEGIN { FS=" " } 
$1 == "fruit" { fr=$2; print fr }' file
apple
mango
orange

(或者只是
awk'/^fruit/{print$2}'
file)

好吧,这个awk完全错了。例如,
FS
不能这样设置,它将输出每条记录:

$ awk 'FS=" "' file
fruit apple 1 3
fruit mango 4 9
vegetable tomato 6 5
fruit orange 9 8
vegetable potato 1 4
使用:

接下来,在awk中不要将变量引用为
$fr
(除非这是您想要的)。计算结果为
$0
,您将打印整个记录,以解释输出中的重复记录。因此,总结一下:

$ awk '
BEGIN { FS=" " } 
$1 == "fruit" { fr=$2; print fr }' file
apple
mango
orange

(或者只需
awk'/^fruit/{print$2}'
文件)

有了这个小的awk代码,您可以像这样内联使用它:

awk -F" " '/fruit/ {print $2}' data.dat
apple
mango
orange
但您不需要将字段分隔符设置为空格,只需将其忽略即可。(注意,然后将包括标签)


有了这个小的awk代码,您可以像这样内联使用它:

awk -F" " '/fruit/ {print $2}' data.dat
apple
mango
orange
但您不需要将字段分隔符设置为空格,只需将其忽略即可。(注意,然后将包括标签)


请添加一条注释,解释您的代码如何修复问题以改进此答案。@EricHauenstein更新了一个示例命令以测试更改。看看这是否有帮助。请添加一条注释,解释您的代码如何解决问题以改进此答案。@EricHauenstein更新了一个示例命令以测试更改。看看这是否有帮助。