Неожиданный результат при сортировке CSV-файла

Попробуйте это

$ awk '{a[substr($0,0,7)]+=$2}END{for(b in a){print b,a[b]}}' myfile
2018-02 22
2019-01 213
2018-03 13
2018-04 9
$

Для сортировки добавьтеsort

$ awk '{a[substr($0,0,7)]+=$2}END{for(b in a){print b,a[b]}}' myfile | sort
2018-02 22
2018-03 13
2018-04 9
2019-01 213
$
0
09.04.2021, 14:32
1 ответ

Странно. Когда я применяю ваш конвейер к этим данным, я получаю

Sile
Shae
Shae
Shay
Simeon

Рассмотрим конвейер поближе:

cat filename | grep "^.\{0\}S" | cut -d, -f1,6 | sort -s -n -k1,1

Сначала упростим его до

grep "^S" filename | cut -d, -f1,6 | sort -s -n -k1,1

Вам не нужен кот (это иногда называют "злоупотреблением котом" ), и регулярное выражение запрашивает нулевые символы после начала строки, за которыми следует S. Это эквивалентно строке, которая начинается с С.

Почему вы вырезаете поля 1 и 6, когда их всего два? И я не верю, что результат удерживает второе поле. Что-то здесь не так, но давайте проигнорируем странное cut.

Вы выполняете числовую сортировку. Поскольку в файле нет номера и указано -s, порядок остается прежним. Снимите -nи/или -s.

1
28.04.2021, 22:53

Теги

Похожие вопросы