假设我有一系列没有特定顺序的值:
Metric1 Metric3 Metric4 Metric5 Metric9 Metric8
Value1 Value3 Value4 Value5 Value9 Value8
grep for Metric5并吐出该列的最佳方法是什么?
例如
grep Metric5 <file>
应该返回
Metric5
Value5
答案 0 :(得分: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 :(得分: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