过去一个月我刚刚开始学习 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 次