regex - 尝试按 awk 中的特定列值打印行

标签 regex select awk

我有一个包含 400M 记录的文件。我正在尝试写出与 sctg2 = n 匹配的单个文件,其中 n = 1 到 43。scgt2 是第五列。示例 CSV 文件(samplef.csv) 可在此处获取:http://goo.gl/if85vJ

ofips, dfips, ofaf, dfaf, sctg2, tons, value
1001,1001,1,1,1,10,20
1001,1002,1,1,1,20,30
1001,1003,1,1,1,30,40
1001,1004,1,1,1,40,50
1001,1001,1,1,2,110,20
1001,1002,1,1,2,120,30
1001,1003,1,1,2,130,40
1001,1004,1,1,2,140,50
1001,1001,1,1,3,210,20
1001,1002,1,1,3,220,30
1001,1003,1,1,3,230,40
1001,1004,1,1,3,240,50

我使用了 awk (Windows 7),并且尝试了以下表达式,它只会选择 sctg2 = 2 的记录(所有这些都将输出作为空文件):

gawk '$5 == 2 {print $1, $2, $6, $7}' samplef.csv > sampleout.csv
gawk '$5 ~ /2/ {print $1, $2, $6, $7}' samplef.csv > sampleout.csv

预期输出(sampleout.csv)为:

ofips, dfips, tons, value
1001,1001,110,20
1001,1002,120,30
1001,1003,130,40
1001,1004,140,50

感谢任何帮助,因为我不确定我在这里做错了什么并且束手无策。它是 CSV 或正则表达式模式数字这一事实对此有什么影响吗?

TIA,

克里希南

最佳答案

默认情况下,awk 使用空格来分隔 列。如果您想使用逗号,请尝试:

gawk '$5 == 2 {print $1, $2, $6, $7}' FS=, samplef.csv > sampleout.csv

FS 是字段分隔符,将其设置为逗号应该可以满足您的要求。有多种设置该值的技术,以下各项都是等效的。 (这些与上面显示的形式之间存在细微的差异,但这些差异与此特定示例无关)。

awk -v FS=, '$5 == 2 {print $1, $2, $6, $7}'
awk 'BEGIN{FS=","} $5 == 2 {print $1, $2, $6, $7}'
awk -F , '...'

关于regex - 尝试按 awk 中的特定列值打印行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21807313/

相关文章:

python - 如何找到匹配的字节码?

sql - 如何从 SQL 结果集中删除空白行

linux - 使用 awk 解析在字段中包含逗号的制表符分隔文件

c# - 用于在编译器输出中查找警告和错误的正则表达式

python - 查找所有正则表达式匹配的索引?

python - Python 中非英语语言的正则表达式匹配

shell - 比较两个文件并根据 key 打印两个文件中较小的一个

Magento - 将邮政编码/邮政编码添加到 Magento 1.6.2 中的订单网格中

jquery - 使用 jquery 从选择下拉列表中删除所有条目的最简单方法是什么?

linux - 使用 shell 脚本查找出现百分比