Я хочу получить целочисленное значение после определенной строки из файла и отсортировать все целые числа. Например, у меня есть файл с тысячами строк с весом строки,
-weight 100
-weight 200
-weight 20
Я хочу получить все целые значения в отсортированном порядке.
При поиске самой длинной строки чисел, которая является последней вещью на строке, можно просто использовать grep
:
$ grep -oP '\d+\s*$' file
100
200
20
-o
говорит grep
только распечатать часть соответствия строки и -P
включает Perl Совместимые Регулярные выражения. PCREs позволяют нам использовать \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
Попробуйте это:
cut -d ' ' -f2 inputfile|sort -n
-d ' '
- установить разделитель на пробел
-f2
- получить второй столбец
sort -n
- отсортировать результат в виде чисел
Результат теста:
20
100
200
Попробуйте выполнить команду 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
: передать вывод в команду сортировки и отсортировать по числовому значению.