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

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

-weight 100
-weight 200
-weight 20

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

2
задан 29 May 2019 в 11:00

3 ответа

При поиске самой длинной строки чисел, которая является последней вещью на строке, можно просто использовать 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
3
ответ дан 29 May 2019 в 11:00

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

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

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

20
100
200
0
ответ дан 29 May 2019 в 11:00

Попробуйте выполнить команду 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: передать вывод в команду сортировки и отсортировать по числовому значению.
0
ответ дан 29 May 2019 в 11:00

Другие вопросы по тегам:

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