Найдите определенный номер и отсортируйте его

Если это несколько символов, вы можете использовать:

Ctrl+Shift+U Enter 'utf8 code of your char' Enter

Вы можете найти код utf8 здесь

1
15.07.2020, 14:34
1 ответ

Попробуйте:

awk '{c[$NF+0]++; a[NR]=$NF+0; b[NR]=$0} END{for(i=1;i<=NR;i++)if(c[a[i]]>1)print b[i]}' file

Использование входного файла:

$ cat file
I love my country 1234
I love Newyork 5678
I love my city 1234
I love my pet 1111
I love my dog 2222
I love my cat 1111
I love my cat 5555

Приведенная выше команда выдает:

$ awk '{c[$NF+0]++; a[NR]=$NF+0; b[NR]=$0} END{for(i=1;i<=NR;i++)if(c[a[i]]>1)print b[i]}' file
I love my country 1234
I love my city 1234
I love my pet 1111
I love my cat 1111

Многострочная -линейная версия

Для тех, кто предпочитает, чтобы их команды располагались на нескольких строках:

awk '
    {
        c[$NF+0]++
        a[NR]=$NF+0
        b[NR]=$0
    }
    END{
        for(i=1; i<=NR; i++)
            if (c[a[i]]>1)
                print b[i]
    }
    ' file

Теперь работает

  • c[$NF+0]++

    Массив cтеперь отслеживает, сколько раз число в последнем поле каждой строки появлялось в файле.

  • a[NR]=$NF+0

    Массив aхранит число в последнем поле строки под ключом номера строки, NR.

  • b[NR]=$0

    Для строки с номером NRмассив bхранит строку.

  • END{for(i=1;i<=NR;i++)if(c[a[i]]>1)print b[i]}

    После того, как мы достигнем конца файла, эта функция снова перебирает каждую строку и печатает ее, если число в cдля числа в этой строке, как указано в a, больше 1.

2
18.03.2021, 23:19

Теги

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