2016-04-29 5 views
0

У меня есть CSV файл, как это:Сортировка столбца CSV по дате с текстом заголовка и числовой колонке

Order,Item,Date 
387-0293,chips,04/26/2016 
133-4454,soda,04/25/2016 
284-9989,beer,04/27/2016 

Сумма заказов меняется ежедневно.

Как я могу получить третий столбец для сортировки по дате?

Я пробовал кучу разного рода комбо, вот некоторые вещи, которые я пытался, что я думал, работал бы:

cat test.csv | sort -t, -k3 > sorted.csv 
cat test.csv | sort -u -r > sorted.csv 
cat test.csv | sort -n -k3 > sorted.csv 

Я не супер с Баш знающие, просто искал здесь и Google для ответов.

ответ

0

Один из способов использования GNU AWK, используя встроенный в указываете ей и PROCINFO:

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 
2

Вы были очень близки:

$ 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 «от 7-го символа 3-го поля до конца строки, численно», 3.1,3.2n предназначен для «1-го и 2-го символов 3-го поля, численно» и т. Д.

Первое поле сортировки начинается после окончания третьего поля в первой строке, поэтому оно пустое, которое сортируется перед числами.

+0

безупречный информация. Я ставлю то же самое в своем терминале, но это не сортировка, хотя любая идея почему? Будет ли версия # на моей системе или сервере иметь значение? Я использую терминал Mac GNU bash, версия 3.2.57 (1) -release. –