使用 awk 根据第一行中的值从文件第三行获取两个特定列

使用 awk 根据第一行中的值从文件第三行获取两个特定列

我希望根据文件第一行的第一列有条件地从文件第三行中选择两列。

这是文件格式:

v1
shortdesc
value1 value2 value3 value4 ...

使用这个例子,我想要value2and value3if v1,否则,我想要value1and value4

我知道如何使用类似的方法获取行和列,awk 'FNR ==1 {print $1}但如何使用该if子句?

对我不起作用的代码看起来像这样:

awk '{if("NR == 1 $1"=="v1") {FNR==3 print $2 "\t" $3;} else {FNR==3 print $1 "\t" $4;}}'

答案1

你可以试试这个:

awk 'NR == 1 { if ($1 == "v1") { p = 1; } } NR == 3 { if (p) { print $2 "\t" $3; } else { print $1 "\t" $4; } }' file

答案2

只是为了好玩:
sed

sed -n '1h
        3{
            x
            G
            s/v1\n\S* \(\S* \S*\).*/\1/p
            t
            s/.*\n\(\S*\) \S* \S*\( \S*\).*/\1\2/p
          }
         4Q' file

测试,,尾巴,

[ $(head -1 file) == 'v1' ] &&
    field='2,3' ||
    field='1,4'
head -5 file | tail -1 | cut -d" " -f"$field"

巴什

{ read v1
  read
  read a b c d e
  } <file
[ "$v1" == 'v1' ] && echo $b $c || echo $a $d

相关内容