Awk 如何在一个专栏上grep?(垂直扫描而不是水平扫描)

Awk 如何在一个专栏上grep?(垂直扫描而不是水平扫描),awk,grep,Awk,Grep,假设我有一系列没有特定顺序的值: Metric1 Metric3 Metric4 Metric5 Metric9 Metric8 Value1 Value3 Value4 Value5 Value9 Value8 对Metric5进行grep并写出该专栏的最佳方式是什么 比如说 grep Metric5 <file> 编辑:回想起来,这就是Python Pandas和csvcut似乎更高效的地方 Python路由: import pandas as pd df =

假设我有一系列没有特定顺序的值:

Metric1 Metric3 Metric4 Metric5  Metric9  Metric8
Value1  Value3  Value4  Value5  Value9  Value8
对Metric5进行grep并写出该专栏的最佳方式是什么

比如说

grep Metric5 <file>
编辑:回想起来,这就是Python Pandas和csvcut似乎更高效的地方

Python路由:

import pandas as pd
df = pd.read_csv('data.txt', header = None)
df[['metric5', 'metric5']] 
csvcut:

资料

命令:

$ cat test-cols.dat | tr -s ' ' ',' | csvcut -c id,age | tr ',' ' ' | column -t
id  age
1   50
2   70
$cat>foo.awk
{
对于(i=1;i
$cat>foo.awk
{
对于(i=1;i一般而言:

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
awk-v colNames=“Metric5 Metric1 Metric9”
开始{split(colNames,tmp);for(tmp中的i)tgts[tmp[i]}
NR==1{
对于(i=1;i一般而言:

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
awk-v colNames=“Metric5 Metric1 Metric9”
开始{split(colNames,tmp);for(tmp中的i)tgts[tmp[i]}
NR==1{

对于(i=1;我应该
grep Value3
返回什么?应该
grep Value3
返回什么?哦,哇,甚至没有想到多个匹配项。然后再次强调,
foo
在我的解决方案中非常强大,
似乎是这样。哦,哇,甚至没有想到多个匹配项。然后,
foo
在我的解决方案中也非常强大,
似乎是这样。
$ 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
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