LINUX.ORG.RU

BASH одинаковая часть строк

 


0

1

Привет.

Есть 2 переменные a и b, содержащие одинаковую часть строки.

Например:

a=«2014-05-10»

b=«2014-05-11»

Очевидно, одинаковая часть - «2014-05-1»

Как бы её вычленить?

★★★★★

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

Ответ на: комментарий от ziemin

Да такую и решаю - из двух дат нужно вычленить общую часть.

slamd64 ★★★★★
() автор топика
import difflib

a='2014-05-10'
b='2014-05-11'

start,_,length=difflib.SequenceMatcher(a=a,b=b)\
  .find_longest_match(0,len(a),0,len(b))

print(a[start:length])
anonymous
()
Ответ на: комментарий от aidan

Да, пожалуй, побуквенное сравнение - самое оптимальное.

slamd64 ★★★★★
() автор топика

Всем спасибо.

slamd64 ★★★★★
() автор топика
d1='2014-05-10'
d2='2014-05-11'
$ echo "$d1 $d2" | awk '{print index($1,$2)}'
0
# cut last symbol
d2=`echo $d2 | sed 's/.$//'`
$ echo "$d1 $d2" | awk '{print index($1,$2)}'
1
# 1 -- нашли. общая часть в $d2

Смысл понятен?

Вот всё решение в awk

$ echo '2014-05-10 2014-05-21' | awk '{while(length($2)>0) {if(index($1,$2)==1) {print $2; exit} else {sub(".$", "", $2)}}}'
2014-05-

sdio ★★★★★
()
Последнее исправление: sdio (всего исправлений: 4)
$ echo "2014-05-10
2014-05-11"|sed -r 'N;s/(.*).*\n\1.*/\1/'
2014-05-1

тут выделяется ПЕРВАЯ общая часть. МАКСИМАЛЬНАЯ — сложнее, но sed тоже может. За деньги.

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

Говорят, «время - деньги». Задачу я уже решил и закрыл.

Так что ты опоздал. Твои опоздавшие услуги никому не нужны.

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

Твои опоздавшие услуги никому не нужны.

ты хотел сказать «тебе не нужны». Я и не настаиваю, сравнивай побуквенно.

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