Abordagem curta gawk :
awk '(index($1, $2) !=0 && length($2) >= 4) || (index($2, $1) !=0 && length($1) >= 4)' file
A saída:
023q 023q023q
0adc 0adc0adc
123456 123456
abcde abcdefg
index(in, find)
Search the string in for the first occurrence of the string find, and return the position in characters where that occurrence begins in the string in.
Para o caso mais complexo , quando precisamos encontrar a substring mais comum com pelo menos 4 caracteres em 2 strings de entrada - eu sugeriria > Python abordagem:
Digamos que o arquivo de entrada tenha sido um pouco "sofisticado" e tenha as seguintes linhas:
1023q 023q023q
v0adc 20adc0adc
s123456 123456
eabcde cabcdefg
08tgdf 90alkhg
Para encontrar a subseqüência de caracteres comum mais longa, usaremos SequenceMatcher classe do módulo difflib .
find_common_lines.py
script:
import re
from difflib import SequenceMatcher
with open('filename', 'r') as fh:
for l in fh.read().splitlines():
items = re.findall(r'\S+', l.strip()) # getting 2 comparable strings
m = SequenceMatcher(None, items[0], items[1]).find_longest_match(0, len(items[0]), 0, len(items[1]))
if m.size >= 4:
print(l)
Uso (você pode ter outra versão do python 3.x, o caso atual foi testado em python 3.5):
python3.5 find_common_lines.py
A saída:
1023q 023q023q
v0adc 20adc0adc
s123456 123456
eabcde cabcdefg