Я хочу получить целочисленное значение после определенной строки из файла и отсортировать все целые числа. Например, у меня есть файл с тысячами строк со строковым весом,
-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
: Передайте вывод в команду сортировки и отсортируйте по числовому значению.