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数组,但我选择的是普通的东西。