![Сортировка чисел с плавающей точкой и awk](https://rvso.com/image/109208/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%20%D1%87%D0%B8%D1%81%D0%B5%D0%BB%20%D1%81%20%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9%20%D1%82%D0%BE%D1%87%D0%BA%D0%BE%D0%B9%20%D0%B8%20awk.png)
Рассмотрим следующий foo.dat
файл с 11 столбцами:
893 1 754 946 193 96 96 293.164 293.164 109.115 70.8852
894 1 755 946 192 95 96 291.892 292.219 108.994 70.821
895 1 755 947 193 95 97 290.947 291.606 109.058 70.5709
896 1 755 947 193 95 97 290.002 290.663 109.122 70.5053
897 1 755 948 194 95 98 289.057 290.057 109.187 70.2532
898 1 754 949 196 96 99 288.444 289.456 109.44 70
899 1 754 950 197 96 100 287.501 288.862 109.506 69.7458
900 1 754 949 196 96 99 286.559 287.578 109.573 69.8637
Я хотел бы отфильтровать столбцы 11 и 9 и напечатать только их в файле, но ввозрастающий порядок по 1-му новому столбцу, то есть после печати 11 и 9 столбцов отсортировать вывод по числовому правилу.
Я пытался
awk -F' ' '{printf "%-12s%-12s\n", $11, $9}' foo.dat | sort -g
но вывод странный вокруг 70
. Это
70.2532 290.057
70 289.456
70.5053 290.663
Почему 70
не раньше 70.2532
? Похоже, .
его игнорируют.
решение1
Я подозреваю, что у вас локаль, использующая запятую в качестве десятичного разделителя. Это должно исправить эту проблему:
awk -F' ' '{printf "%-12s%-12s\n", $11, $9}' foo.dat | LC_ALL=C sort -g