真的很抱歉,如果之前有人问过这个问题,因为这感觉很基本,我只是没有把这些点联系起来,这让我抓狂!
本质上我有一个文本文件,并且我将特定行的第二个字段分配给变量,即
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
。