AWK-Max变量?
为什么第一个语句有效,而第二个语句无效?我试图添加另外两个(显示一个)变量来进行另一个比较,但是第二个实例出错了 第一个实例AWK-Max变量?,awk,Awk,为什么第一个语句有效,而第二个语句无效?我试图添加另外两个(显示一个)变量来进行另一个比较,但是第二个实例出错了 第一个实例 awk 'f1=substr($1,0,9), f2=substr($3,0,9){if(f1==f2)print $1,$2,$3,$4}' file awk 'f1=substr($1,0,9), f2=substr($3,0,9), f3=substr($1,5,3){if(f1==f2)print $1,$2,$3,$4}' file awk: cmd. li
awk 'f1=substr($1,0,9), f2=substr($3,0,9){if(f1==f2)print $1,$2,$3,$4}' file
awk 'f1=substr($1,0,9), f2=substr($3,0,9), f3=substr($1,5,3){if(f1==f2)print $1,$2,$3,$4}' file
awk: cmd. line:1: f1=substr($1,0,9), f2=substr($3,0,9), f3=substr($1,5,3){if(f1==f2)print $1,$2,$3,$4,16}
awk: cmd. line:1: ^ syntax error
TULSHDRJ02 ae0.0 KSCYBBRJ01 ae1.0
MTC3BBRJ02 ae4.0 KSCYBBRJ01 ae6.0
KSCYBBRJ01 ae2.0 KSCYBBRJ02 ae2.0
MTC1BBRJ02 ae4.0 KSCYBBRJ02 ae6.0
第二个实例
awk 'f1=substr($1,0,9), f2=substr($3,0,9){if(f1==f2)print $1,$2,$3,$4}' file
awk 'f1=substr($1,0,9), f2=substr($3,0,9), f3=substr($1,5,3){if(f1==f2)print $1,$2,$3,$4}' file
awk: cmd. line:1: f1=substr($1,0,9), f2=substr($3,0,9), f3=substr($1,5,3){if(f1==f2)print $1,$2,$3,$4,16}
awk: cmd. line:1: ^ syntax error
TULSHDRJ02 ae0.0 KSCYBBRJ01 ae1.0
MTC3BBRJ02 ae4.0 KSCYBBRJ01 ae6.0
KSCYBBRJ01 ae2.0 KSCYBBRJ02 ae2.0
MTC1BBRJ02 ae4.0 KSCYBBRJ02 ae6.0
文件
awk 'f1=substr($1,0,9), f2=substr($3,0,9){if(f1==f2)print $1,$2,$3,$4}' file
awk 'f1=substr($1,0,9), f2=substr($3,0,9), f3=substr($1,5,3){if(f1==f2)print $1,$2,$3,$4}' file
awk: cmd. line:1: f1=substr($1,0,9), f2=substr($3,0,9), f3=substr($1,5,3){if(f1==f2)print $1,$2,$3,$4,16}
awk: cmd. line:1: ^ syntax error
TULSHDRJ02 ae0.0 KSCYBBRJ01 ae1.0
MTC3BBRJ02 ae4.0 KSCYBBRJ01 ae6.0
KSCYBBRJ01 ae2.0 KSCYBBRJ02 ae2.0
MTC1BBRJ02 ae4.0 KSCYBBRJ02 ae6.0
输出
KSCYBBRJ01 ae2.0 KSCYBBRJ02 ae2.0
awk程序的一般程序结构如下所示:
condition { action [; action [ ; ... ]] }
多个动作之间用空格分隔;或者新线
条件和操作块都是可选的。当你忽略这个条件时
{ action [; action [ ; ... ]] }
。。。将始终执行操作。如果忽略这些操作:
condition
。。。默认操作是print
这些块中的多个可以放在一行中:
cond1 { action1 } cond2 {action2} ...
注意:换行符始终可用作分隔符(对于多行程序)
我猜你想要:
awk '{f1=substr($1,0,9);f2=substr($3,0,9)} f1==f2{print $1,$2,$3,$4}'
。。。或以多行形式:
awk '# Runs on every line
{
f1=substr($1,0,9)
f2=substr($3,0,9)
}
# Runs only if condition is met
f1==f2 {
print $1,$2,$3,$4
}'
但不完全是这样强>
应该是
awk '{f1=substr($1,1,9);f2=substr($3,1,9)} f1==f2{print $1,$2,$3,$4}'
而不是
awk '{f1=substr($1,0,9);f2=substr($3,0,9)} f1==f2{print $1,$2,$3,$4}'
请注意,awk中的字符串、字段和数组索引从1开始,而不是从0开始
还请检查,它显示了如何简化命令。awk程序的一般程序结构如下:
condition { action [; action [ ; ... ]] }
$ awk 'substr($1,1,9)==substr($3,1,9){print $1,$2,$3,$4}' file
多个动作之间用空格分隔;或者新线
条件和操作块都是可选的。当你忽略这个条件时
{ action [; action [ ; ... ]] }
。。。将始终执行操作。如果忽略这些操作:
condition
。。。默认操作是print
这些块中的多个可以放在一行中:
cond1 { action1 } cond2 {action2} ...
注意:换行符始终可用作分隔符(对于多行程序)
我猜你想要:
awk '{f1=substr($1,0,9);f2=substr($3,0,9)} f1==f2{print $1,$2,$3,$4}'
。。。或以多行形式:
awk '# Runs on every line
{
f1=substr($1,0,9)
f2=substr($3,0,9)
}
# Runs only if condition is met
f1==f2 {
print $1,$2,$3,$4
}'
但不完全是这样强>
应该是
awk '{f1=substr($1,1,9);f2=substr($3,1,9)} f1==f2{print $1,$2,$3,$4}'
而不是
awk '{f1=substr($1,0,9);f2=substr($3,0,9)} f1==f2{print $1,$2,$3,$4}'
请注意,awk中的字符串、字段和数组索引从1开始,而不是从0开始
还请检查,这显示了如何简化命令
$ awk 'substr($1,1,9)==substr($3,1,9){print $1,$2,$3,$4}' file
因为你正在打印所有的东西,所以你可以删除动作部分
$ awk 'substr($1,1,9)==substr($3,1,9)' file
或者,对于干燥
$ awk 'function s(v) {return substr(v,1,9)}
s($1)==s($3)' file
因为你正在打印所有的东西,所以你可以删除动作部分
$ awk 'substr($1,1,9)==substr($3,1,9)' file
或者,对于干燥
$ awk 'function s(v) {return substr(v,1,9)}
s($1)==s($3)' file
第一个作为地址范围,第二个是一行中的多个命令,为什么是逗号?您希望这些命令能做什么?第一个作为地址范围,第二个是一行中的多个命令,为什么是逗号?您希望这些命令能做什么?是的,除了
ARGV
,几乎所有的事情都可以做。对于脚本参数,ARGV也以1开头。ARGV[0]用于方便存储脚本的名称。虽然还有其他的边缘情况,比如在GNU awk中第四个要拆分的arg()的seps数组,但我选择的是普通的东西。是的,除了ARGV
,几乎所有的东西都是一样的。对于脚本参数,ARGV也以1开头。ARGV[0]用于方便存储脚本的名称。还有其他一些边缘情况,比如在GNU awk中第四个要拆分()的参数seps数组,但我选择的是普通的东西。