如何在awk中使用的字符串列表中找到单词的位置?

时间:2017-11-30 08:15:33

标签: awk count grep position

早上好,

我经常有文件,我想grep + awk但有很多字段。 我对一个特别感兴趣(所以我想awk '{print $i}')但是我怎么能知道我的列的位置(即“我”这个),除了手动计算它?

有大约70个字段的文件,我会节省很多时间! :)

非常感谢,

[编辑]

根据Ian McGowan的建议,我将在文件标题中查找列号:

head -1 myFile | awk '{for (i=1; i<=NF; i++) printf("%3d=%s\n", i, $i); }' | grep -i <the_column_Im_looking_for>

谢谢大家,

Will1v

3 个答案:

答案 0 :(得分:1)

我正在寻找样品,但是:

$ cat > file
this is
the sample
$ awk '{ 
    for(i=1;i<=NF;i++)
        if($i=="sample")
            print NR,i 
}' file
2 2

答案 1 :(得分:1)

我在尝试分析一些大文本分隔文件时一直这样做。

$head -4 myfile
4A      1       321     537     513.30
4B      0.00
8       592     846     905.66
9B2     39      887     658.77

通过循环遍历列/字段来转置或转动:

$awk '{ for (i=1; i<=NF; i++) printf("%4d %3d=%s\n", NR, i, $i); }' < myfile
   1   1=4A
   1   2=1
   1   3=321
   1   4=537
   1   5=513.30
   2   1=4B
   2   2=0.00
   3   1=8
   3   2=592
   3   3=846
   3   4=905.66
   4   1=9B2
   4   2=39
   4   3=887
   4   4=658.77

你可以在printf的格式掩码中添加printf("row=%-4d col=%-3d:%s\n", NR, i, $i);或其他任何内容,然后grep只查找你想要查找列的数据,或者如果你知道col = 44的列grep来获取第44栏。

答案 2 :(得分:1)

if(m == null || m.getPosition() == null) 会在每行打印一列,因此您可以执行此操作:

xargs -n1