使用bash按行和列grep

时间:2011-01-03 10:34:56

标签: regex bash csv awk grep

假设以下示例csv输入

  

SYMBOL,JAN-11,FEB-11,MAR-11
  DEF,20,25,20   HIG,50,50,50

无论如何都要使用行和列来grep特定值 即grep符号DEF和FEB-11应返回值25

行方式grep是微不足道的,但是我对列明智的grep有问题。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

正如@Ignacio Vazquez-Abrams所说,awk是一个更好的工具。请尝试以下脚本:

#!/bin/awk -f

# usage: csvgrep row column [file]

BEGIN {
    FS = "[ \t]*,[ \t]"
    row = ARGV[1]
    col = ARGV[2]
    ARGV[1] = ARGV[2] = ""

    # read header
    getline
    for (i=1; i<=NF; i++)
        if ($i == col) {
            col = i
            break
        }
}

($1 == row) { print $col }

您可能想要添加输入验证。 awk可能位于您系统的/usr/bin