如果4月5日到4月10日之间的日期来自第二个字段($ 2),则想要提取订单项。将许多枪zip文件放入该目录。
Inputs.gz
zcat Inputs*.gz | awk 'BEGIN{FS=OFS=","} { if ( (substr($2,1,2) >=5) && (substr($2,1,2) <=10) ) print $0 }' > Output.txt
我已尝试过以下命令和in-complete
ab,05-APR-15,40,0,6
ab,07-APR-15,55,0,6
ab,10-APR-15,70,0,1
预期产出
{{1}}
请建议......
答案 0 :(得分:2)
试试这个:
awk -F",|-" '$2 >= 5 && $2 <= 10'
使用FS
标志将日期分隔符添加到-F
。为了确保它是2015年的APR
,您可以单独添加以下测试:
awk -F",|-" '$2 >= 5 && $2 <= 10 && $3=="APR" && $4==15'
虽然这使得日期很容易在前面解析,但如果你想再次打印它,你需要用_date = $2 "-" $3 "-" $4
之类的东西重建它。如果您需要一般操作数据,则需要在BEGIN {OFS=","}
部分添加回来。
我使用的字段编号假设第一个字段中没有“ - ”分隔符。
我得到以下输出:
ab,05-APR-15,40,0,6
ab,07-APR-15,55,0,6
ab,10-APR-15,70,0,1
如果你有一堆乱七八糟的日期而你真的只关心第二个字段中的那个通过逗号分隔符,你可以使用分割如下:
awk -F"," '{ split($2, darr, "-") } darr[1] >= 5 && darr[1] <= 10 && darr[2]=="APR" && darr[3]==15'
就像说:
darr
分隔符-
数组
darr[1] >= 5 && darr[1] <= 10 && darr[2]=="APR" && darr[3]==15
为真,则打印整行。答案 1 :(得分:1)
使用正则表达式的另一个简单解决方案
awk -F',' '$2 ~ /([0][5-9]|10)-APR-15/{ print $0 }' txt
-F
字段分隔符。 $2
第二场~
匹配正则表达式使用内部字段分隔符
awk 'BEGIN{ FS="," } $2 ~ /([0][5-9]|10)-APR-15/{ print $0 }' txt
使用明确的日期编号声明
awk 'BEGIN{ FS="," } $2 ~ /(05|06|07|08|09|10)-APR-15/{ print $0 }' txt