使用 AWK:将不同数量的串联字段分配给变量

使用 AWK:将不同数量的串联字段分配给变量

真的很抱歉,如果之前有人问过这个问题,因为这感觉很基本,我只是没有把这些点联系起来,这让我抓狂!

本质上我有一个文本文件,并且我将特定行的第二个字段分配给变量,即

VAR=$(awk 'NR==1 {print $2}' entry.txt)

但是,有时文本文件的第一行会有 4 个字段。我想说

   If ROW 1 has 4 fields  
        VAR = $2, $3 & $4 concatenated
   Else
        VAR = $2 

我确信这是基本的 awk,我只是在进行一个小项目,以前从未使用过它。我知道我应该读一本书,但这确实是一个很小的脚本!

谢谢

答案1

awk 'NF == 4 { print $2 $3 $4; exit } { print $2; exit }' file

如果文件的第一行恰好有四个空格分隔的字段,则这会连接第二个、第三个和第四个字段。否则,它将返回文件第一行的第二个字段。程序在输出任何内容后就会退出,因此我们确信这只是我们看到的第一行。

具有不同的逻辑:

awk 'NF == 4 { out = $2 $3 $4 } NF != 4 { out = $2 } { print out; exit }' file

或者,

awk '{ out = $2 } NF == 4 { out = out $3 $4 } { print out; exit }' file

这些命令中的任何一个都包含在您的命令替换中:

var=$( awk ... )

答案2

awk 'NR==1 && NF==4 { var=$2 $3 $4 } NR==1 && NF!=4 { var=$2 }' /path/to/input

答案3

你可以做

awk '{$1=""; print (NF==4)?$0:$2; exit}' OFS= infile

三元条件运算(NF==4)?$0:$2符检查是否数量F字段等于 4(当字段用空格分隔时 (awk默认FS$0) ) 然后在我们剥离第一个字段后打印整行$1="",否则:打印filed#2 $2

相关内容