Как к числовому виду последним столбцом?

Передача по каналу в разность эквивалентна выполнению

diff path/file.name

и затем, после того как это работает, вводя все содержание файла.

Как Вы видите, это не то, что Вы ожидали.

23
31.08.2011, 22:35
2 ответа

Следующее использование командной строки awk предварительно ожидать последнее поле каждой строки file.txt, делает обратный числовой вид, затем использует cut удалить добавленное поле:

awk '{print $NF,$0}' file.txt | sort -nr | cut -f2- -d' '
34
27.01.2020, 19:42
  • 1
    omg..., который я не сделал, знал о $RS!!большое спасибо!!!!! –  LanceBaynes 02.04.2011, 23:48
  • 2
    @forcefsck: Я не думаю, что это возможно с только sort -k. begfield функция в виде GNU просто считает в обратном порядке для обнуления. Ваш подход decorate-sort-undecorate (DSU), кажется, лучший способ, которым я думаю. –  Mikel 03.04.2011, 02:20
  • 3
    Из интереса, почему $NF,$RS и нет $NF,$0? Я не знал $RS сделал это. (Я предполагаю, что это эквивалентно $NF,$"\n", который делает то же, но это также удивляет, я думаю.) –  Mikel 03.04.2011, 03:36
  • 4
    @johnny8888, @forcefsck: В awk, $ может сопровождаться любым выражением. “Эффект полевой оценки выражения числа к чему-либо кроме неотрицательного целого числа является неуказанным”. GNU awk (в моей системе) рассматривает строку как "\n" как нуль. Другие (например, исходная реализация A, W и K) прерываются с сообщением об ошибке. Если RS произошедший, чтобы быть цифрой, Вы получили бы соответствующее поле на любой реализации. Не делайте этого, используйте $0. –  Gilles 'SO- stop being evil' 03.04.2011, 14:51
  • 5
    Действительно аккуратный! Так долгое объяснение того, что продолжается: с awk распечатайте последнее поле сначала затем целая запись, вид наоборот численно, затем урежьте первое сокращение использования столбца. –  phyatt 07.11.2016, 17:00

Отсортировать последний столбец по убыванию с помощью GNU awk:

awk '{
       # save current row in array with current row number as index
       row[NR]=$0

       # save current last field in array with current row number as index
       last[NR]=$NF
     }
     END{
       # sort array "last" numerically ("num") based on its
       # values ("val") descending ("desc")
       PROCINFO["sorted_in"]="@val_num_desc";

       for(i in last)
         print row[i]
     }' file

Одной строкой:

awk '{ row[NR]=$0; last[NR]=$NF } END{ PROCINFO["sorted_in"]="@val_num_desc"; for(i in last) print row[i] }' file

Выход:

hello my name is Jordan: 476 
hello my name is Manu: 98
hello my name is Joi: 45
hello my name is Loi:  23 
hello my name is John:  4

См. 8.1.6 Использование предопределенных порядков сканирования массива с помощью gawk для получения дополнительной информации об алгоритмах сортировки и 8 Powerful Awk, встроенный -в переменных — FS, OFS, RS, ORS, NR, NF, ИМЯ ФАЙЛА, FNR

1
23.11.2021, 19:50

Теги

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