найти целочисленное значение после строки из файла

найти целочисленное значение после строки из файла

Я хочу получить целочисленное значение после определенной строки из файла и отсортировать все целые числа. Например, у меня есть файл с тысячами строк со строковым весом,

-weight 100
-weight 200
-weight 20

Я хочу получить все целочисленные значения в отсортированном порядке.

решение1

Если вы ищете самую длинную последовательность цифр, которая находится в конце строки, вы можете просто использовать grep:

$ grep -oP '\d+\s*$' file 
100
200
20

Команда -oуказывает grepна необходимость печати только соответствующей части строки, а -Pвключает Perl-совместимые регулярные выражения. PCRE позволяют нам использовать \d+для "одной или нескольких цифр" и \s*для "0 или нескольких пробельных символов". Таким образом, в целом эта команда выведет самую длинную последовательность цифр, найденную в конце строки.

Если вам нужно их отсортировать, просто пройдите по ссылке sort:

$ grep -oP '\d+\s*$' file | sort -n
20
100
200

Если же вам нужно привязать свой шаблон к определенной строке, используйте:

$ grep -oP -- '-weight\s+\K\d+' file | sort -n
20
100
200

Символ \Kуказывает grepне включать ничего, что совпало до этого момента, поэтому команда выше выведет только самую длинную последовательность цифр после символа -weightи 0 или более пробелов.

Обратите внимание: если вы хотите также включить отрицательные числа или десятичные дроби, вам понадобится:

grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n

Например:

$ cat file 
-weight 100
-weight 200
-weight 20
-weight -29
-weight -32.4

$ grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n
-32
-29
20
100
200

решение2

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

cut -d ' ' -f2 inputfile|sort -n

-d ' '- установить разделитель на пробел
-f2- получить второй столбец
sort -n- сортировать результат как числа
Результат теста:

20
100
200

решение3

Попробуйте эту команду sed:

sed -E 's/^.*weight\s([[:digit:]]*).*/\1/' sort.txt  | sort -n

Или

sed -E 's/.*weight\s([0-9]*).*/\1/' sort.txt | sort -n

Прецедент:

-weight 100 
-weight 200 
-weight 20

Полученные результаты:

20
100 
200

Примечание: Вы не привели хороший тестовый пример, поэтому я предположил свой.

Информация:

  • ^.*weight\s([[:digit:]]): Прочитайте каждую строку и запишите числа после слова «вес» с последующим «пробелом».
  • | sort -n: Передайте вывод в команду сортировки и отсортируйте по числовому значению.

Связанный контент