我有一个像这样的CSV文件:
<% if we're on the homepage %>
<ul class="nav navbar-nav navbar-right nav-font">
<li><%= link_to "About", about_path %></li>
<li><%= link_to "Contact", new_contact_path %></li>
</ul>
<% else %>
<ul class="nav navbar-nav navbar-right nav-font-inverted">
<li><%= link_to "About", about_path %></li>
<li><%= link_to "Contact", new_contact_path %></li>
</ul>
<% end %>
订单金额每天都在变化。
如何让第三列按日期排序?
我尝试过一系列不同类型的组合,这里有一些我认为可行的东西:
Order,Item,Date
387-0293,chips,04/26/2016
133-4454,soda,04/25/2016
284-9989,beer,04/27/2016
我对bash并不是超级知识,只是在这里搜索并谷歌寻求答案。
答案 0 :(得分:3)
你很亲密:
$ sort -t , -k 3.7n -k 3.1,3.2n -k 3.4,3.5n test.csv -o sorted.csv
Order,Item,Date
133-4454,soda,04/25/2016
387-0293,chips,04/26/2016
284-9989,beer,04/27/2016
-k
选项最多使用两个参数,您可以在其中将排序字段的开头和结尾指定为基于一个字符串。 3.7n
是&#34;从第3个字段的第7个字符到行尾,数字&#34;,3.1,3.2n
用于&#34;第3个字段的第1个和第2个字符,数值&#34;等等。
第一个排序字段在第一行第三个字段结束后开始,因此它是空的,在数字之前排序。
答案 1 :(得分:0)
使用内置mktime和PROCINFO的GNU awk的一种方式:
awk -F, '
BEGIN {PROCINFO["sorted_in"] = "@ind_str_asc"}
NR==1 {print $0; next}
{
split ($3, d, /[/]/);
time = mktime (d[3] " " d[1] " " d[2] " 00 00 00");
sorted[time] = ((time in sorted) ? sorted[time] RS $0 : $0)
}
END {for (key in sorted) print sorted[key]}
' file
Order,Item,Date
133-4454,soda,04/25/2016
387-0293,chips,04/26/2016
284-9989,beer,04/27/2016