LINUX.ORG.RU

Grep из файла с динамическим условием

 ,


0

1

Есть файл с цифрами кажная на отдельной строке, например:

11
22
23
33
32

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

22
23
33
32

Как это сделать?



Последнее исправление: fenicks (всего исправлений: 4)

Как это сделать?

Перебором.

anonymous
()
Ответ на: комментарий от redwagon

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

fenicks
() автор топика

Бери bash, awk, python, perl, по вкусу. Одним грепом вряд ли получится, так как оно строки независимо обрабатывает.

urxvt ★★★★★
()
Ответ на: комментарий от fenicks

Потому что в линуксе все можно.

Раз ты знаешь, что всё можно, то ты и решай свою задачу. Мы тут причем?

anonymous
()
Ответ на: комментарий от anonymous

Кто это «мы»? Если лично для тебя общение на этом сайт - это работа, то это печально. Задачу я решаю, я никого не прошу кинуть в меня решением. Но вот советы мне бы помогли. Коллективный брейнсторминг он для всех полезен. Вот сейчас в тему ворвется новичок и поразит всех красивым подходом в решении. Разве это не чудесно?

fenicks
() автор топика

Я очень топорно конечно набросал, но вроде бы работает:

#!/bin/bash
digit=0
while read line; do
var1=$(echo "$digit"-"$line" | bc) 
var2=$(echo "$line"-"$digit" | bc)
if [[ "$var1" = 1 ]]; then
echo $digit
echo $line
elif [[ "$var2" = 1 ]]; then 
echo $digit
echo $line
fi 
digit=$line
done < sample.dgt

redwagon
()
cat foo | awk '{diff = last - $0; if ((NR>1) && (diff == 1 || diff == -1)) {print last"\n"$0}; last = $0}'

Убрать возможные дубликаты строк предлагается любознательному читателю в качестве домашнего задания.

Потому что в линуксе все можно. По идее и такая задача линуксу по плечу.

uname -rs                                                                       
FreeBSD 12.1-STABLE
anonymous
()
Ответ на: комментарий от anonymous

awk

Достаточно «изящно». Задача только вот туповатая. Непонятно совсем, нахрена подобное надобно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.