使用 bash 按行和列 grep

发布于 2024-10-09 18:45:27 字数 255 浏览 1 评论 0原文

假设以下示例 csv 输入

符号,2011 年 1 月、2011 年 2 月、2011 年 3 月
防御力,20 ,25 ,20
HIG ,50 ,50 ,50

是否可以同时使用行和列来 grep 查找特定值 即符号 DEF 和 FEB-11 的 grep 应该返回值 25

行方式 grep 很简单,但我在使用列方式 grep 时遇到问题。 任何帮助将不胜感激。

Assuming the following sample csv input

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

Is there anyway to grep for a particular value using both row and column
i.e. grep for symbol DEF and FEB-11 should return value 25

The row-wise grep is trivial but i am having problems with the column wise grep.
any help would be greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

悍妇囚夫 2024-10-16 18:45:27

正如 @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 中。

As @Ignacio Vazquez-Abrams said, awk is a much better tool for this job. Try the following script:

#!/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 }

You may want to add input validation. awk may be in /usr/bin on your system.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文