如何从unix中的cut命令结果中提取子字符串?

时间:2011-03-28 16:12:07

标签: unix scripting awk cut

我有一个'|'文件分隔。文件中的一个字段是时间戳。该字段的格式如下:MM-dd-yyyy HH:mm:ss我希望能够打印到文件的唯一日期。我可以使用剪切命令(cut -f1 -d'|' _file_name_ |sort|uniq)来提取唯一日期。然而,随着该领域的时间部分,我看到了数百个结果。运行cut命令后,我想取前11个字符的子字符串来显示唯一的日期。我尝试使用awk命令,例如:     awk ' { print substr($1,1-11) }' | cut -f1 -d'|' _file_name_ |sort|uniq > _output_file_

我没有运气。我是以错误的方式来做这件事的吗?有没有更简单的方法来提取我需要的数据。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

如果日期是文件中的第一个(空格分隔)字段,那么唯一日期列表就是:

cut -f1 -d' ' filename | sort -u

更新:除了@ shellter的正确答案之外,我还将提供另一种演示其他awk设施的方法:

awk '{split($10, a); date[a[1]]++} END {for (d in date) print d}' filename

答案 1 :(得分:3)

cut -c1-11将显示每个输入行的字符1-11。

答案 2 :(得分:2)

你们都在那里。这是基于日期时间戳位于字段1中的想法。

编辑:将字段更改为10,也使用-u选项进行排序,而不是使用uniq

进行sep进程

你不需要削减,awk会为你做那件事。

awk -F"|" ' { print substr($10,1,11) }'  _file_name_ |sort -u > _output_file_

我希望这会有所帮助。

P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,或者给它一个+(或 - )作为有用的答案