2016-09-07 4 views
0

내가 특별한 순서없이 일련의 값이 있다고 가정하자 :열에서 grep하는 방법은 무엇입니까? (대신 수평 스캔 수직 스캔)

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

Metric5 grep으로 그 열을 뱉어하는 가장 좋은 방법은 무엇입니까? 예를

를 들어

grep Metric5 <file> 

는 일반적으로

Metric5 
Value5 
+0

'grep Value3 '은 무엇을 반환해야합니까? –

답변

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 열을 선택하려는 경우, 분명히 바로 -v에 1 목록 부양하다 nment

+0

와우, 여러 경기를 생각조차하지 못했습니다. 그렇다면 어쨌든'foo'는 내 솔루션에서 꽤 강했다. –