仅搜索 CSV 文件一列的 Grep 命令

仅搜索 CSV 文件一列的 Grep 命令

过去一个月我刚刚开始学习 Linux 和所有相对基本的命令,但我在使用 Grep 命令时遇到了一些问题。我目前陷入如何使用 Grep 命令仅搜索 CSV 文件的一列以查找以两个指定数字开头的数字字符串的问题。我特别尝试列出邮政编码以“48”开头的行,在本例中,该邮政编码包含在 CSV 文件的第 7 列中。每行上还有其他数字数据,这就是为什么我只需要在“Provider”列上使用 Grep 命令。任何帮助我指明正确方向的帮助将不胜感激,因为我已经尝试解决这个问题有一段时间了,我认为我可能稍微过度思考了我需要做什么。

以下是我正在使用的 CSV 数据的示例:

    Provider  Hospital        Total Discharges  Average Covered Charges
    49444     MI - Muskegon   53                18694.9
    49007     MI - Kalamazoo  40                20494.25
    48075     MI - Royal Oak  14                20386.28
    48124     MI - Dearborn   34                34338.47

答案1

grep没有字段或列的概念,因此您必须编写一个模式来以某种方式实现这一点。在一般情况下,这会变得丑陋,但如果您想要的数字位于行的开头,正如示例似乎表明的那样,那就足够简单了:

grep -Ee '^[[:space:]]*48[0-9]+[[:space:]]' file

这将查找以任意数量的空格、 a 4、 an 8、一些其他数字和任何空格字符开头的行。

对于特定领域来说,awk效果更好。默认情况下,它将行拆分为任何空格上的字段。这将查找第一个字段包含48和一些其他数字的行:

awk '$1 ~ /^48[0-9]+$/' file

更改为$1$7其他内容以使用其他字段。

答案2

假设您的文件名为test.csv

grep -E "48[0-9]{3}" test.csv

grep -E 使用正则表达式搜索字符串

48 是您需要的起始号码

[0-9] 是 0 到 9 之间的数字,{3} 表示 3 次

相关内容