awk不';不打印简单字段
这里有一个小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
> # 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更新了一个示例命令以测试更改。看看这是否有帮助。