Use o awk para obter duas colunas específicas da terceira linha de arquivo com base no valor na primeira linha

1

Estou procurando selecionar condicionalmente duas colunas da terceira linha de um arquivo com base na primeira coluna da primeira linha do arquivo.

Aqui está o formato do arquivo:

v1
shortdesc
value1 value2 value3 value4 ...

Usando este exemplo, eu quero value2 e value3 if v1 , caso contrário, gostaria de value1 e value4 .

Eu sei como obter a linha e a coluna usando algo como awk 'FNR ==1 {print $1} , mas como eu uso a cláusula if ?

O código que não está funcionando para mim é parecido com isto:

awk '{if("NR == 1 $1"=="v1") {FNR==3 print $2 "\t" $3;} else {FNR==3 print $1 "\t" $4;}}'
    
por rvidal 20.05.2015 / 21:09

2 respostas

2

Você pode experimentar este:

awk 'NR == 1 { if ($1 == "v1") { p = 1; } } NR == 3 { if (p) { print $2 "\t" $3; } else { print $1 "\t" $4; } }' file
    
por 20.05.2015 / 21:19
1

Apenas por diversão: sed

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

teste , cabeça , final , corte

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

bash

{ read v1
  read
  read a b c d e
  } <file
[ "$v1" == 'v1' ] && echo $b $c || echo $a $d
    
por 20.05.2015 / 23:01

Tags