![使用 awk 根据第一行中的值从文件第三行获取两个特定列](https://linux22.com/image/65457/%E4%BD%BF%E7%94%A8%20awk%20%E6%A0%B9%E6%8D%AE%E7%AC%AC%E4%B8%80%E8%A1%8C%E4%B8%AD%E7%9A%84%E5%80%BC%E4%BB%8E%E6%96%87%E4%BB%B6%E7%AC%AC%E4%B8%89%E8%A1%8C%E8%8E%B7%E5%8F%96%E4%B8%A4%E4%B8%AA%E7%89%B9%E5%AE%9A%E5%88%97.png)
我希望根据文件第一行的第一列有条件地从文件第三行中选择两列。
这是文件格式:
v1
shortdesc
value1 value2 value3 value4 ...
使用这个例子,我想要value2
and value3
if v1
,否则,我想要value1
and 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