基于shell脚本中的字段条件解析CSV文件

时间:2013-07-03 18:55:17

标签: linux shell

我的文件包含这些字段 名字,姓氏,DOB,SSN,电话,状态,ValidtoTime

我想提取名字和ValidtoTime列。提取的数据应该包含将在当前日期的下一个月内过期的用户的名字。

请帮助我,

2 个答案:

答案 0 :(得分:1)

此循环

while IFS=, read -ra fields; do
    : # do stuff
done < filename

将遍历文件,并将逗号分隔的单词存储在名为fields的数组中。第一个名称将在"${fields[0]}",有效时间将为“$ {fields [6]}”

使用date命令解析时间字段并获取当前时间。做一些算术。

如果您还有其他问题,请告诉我们您尝试过的内容以及您遇到的错误。

答案 1 :(得分:0)

我建议在这样的事情上使用awk。 一个与您的问题类似的简单示例:

~/local/tmp » cat csv.txt
1,2,3
4,2,7
9,1,1
~/local/tmp » awk -F, '$3 > 2 {print $1,$3}' csv.txt 
1 3
4 7

澄清我在这里做了什么:

-F,指定分隔符为','

'$ 3&gt; 2'是需要满足的条件。我正在检查第三列中的条目是否大于2.这需要根据您存储ValidtoTime的方式进行修改。如果需要更多帮助,请注明。同时展示你的努力并分享对他们不满意的东西。

'{print}'打印每行的第一个和第三个条目。

如果您需要跳过n行(例如标题为1行),请执行以下操作:

tail -k+n csv.txt | awk -F, '$3 > 2 {print $1, $3}'

这可以帮助您解决问题。如果仍有问题,请在ValidtoTime格式化方式上更具体。