2016-09-07 2 views
0

Допустим, у меня есть ряд значений в произвольном порядке:Как grep на столбце? (Вертикальная развертка вместо горизонтальной развертки)

Metric1 Metric3 Metric4 Metric5 Metric9 Metric8 
Value1 Value3 Value4 Value5 Value9 Value8 

Каков наилучший способ вычленить информацию Metric5 и выплюнуть эту колонку?

Например

grep Metric5 <file> 

Если вернуться

Metric5 
Value5 
+0

Что должно «grep Value3 ' return? –

ответ

0
$ cat > foo.awk 
{ 
    for(i=1;i<=NF;i++) { 
     a[i][NR]=$i 
     if(foo==$i) 
      it=i 
} nr=NR 
} END { 
    if(it!="") 
     for(i=1;i<=nr;i++) 
      print a[it][i] 
} 
$ awk -v foo="Metric5" -f foo.awk foo 
Metric5 
Value5 
2

В общем:

awk -v colNames="Metric5 Metric1 Metric9" ' 
BEGIN { split(colNames,tmp); for (i in tmp) tgts[tmp[i]] } 
NR==1 { 
    for (i=1; i<=NF; i++) { 
     if ($i in tgts) { 
      fldNrs[++numTgts] = i 
     } 
    } 
} 
{ 
    for (tgtNr=1; tgtNr<=numTgts; tgtNr++) { 
     printf "%s%s", $(fldNrs[tgtNr]), (tgtNr<numTgts ? OFS : ORS) 
    } 
} 
' file 
Metric1 Metric5 Metric9 
Value1 Value5 Value9 

Если вы хотите 1 столбец выбран, то, очевидно, просто список 1 на -v ASSIG nment

+0

Ой ничего себе, даже не подумал о нескольких матчах. Опять же, 'foo' был довольно сильным в моем решении, так или иначе,' it' кажется. –

Смежные вопросы