2つの文字列を比較し、次の共通部分をキャプチャします。
FILE0000010985.LOG
FILE0000010999.LOG
FILE0000011000.LOG
1と2を比較すると出力になりたいの
FILE00000109
ですが、1と3を比較すると出力が2文字少なくなります。FILE000001
それは私が考える共通の接頭辞をキャプチャしますが、文字列は私には知られていないので、Bashの部分文字列一致機能などを使用するのと同じくらい簡単ではありません.
答え1
純粋なbashソリューション。 1と2の出力はFILE0000010ではなくFILE00000109です。
#!/bin/bash
arr=(FILE0000010985.LOG
FILE0000010999.LOG
FILE0000011000.LOG
)
for (( i=0; i<${#arr[@]}; ++i )) ; do
for (( j=i + 1; j<${#arr[@]}; ++j )) ; do
x=${arr[i]}
y=${arr[j]}
p=0
while [[ ${x:0:p} == ${y:0:p} ]] ; do
(( ++p ))
done
echo $x $y : ${x:0:p-1}
done
done
答え2
2 行目から始めて、各行を前の行と比較するには、次のようにします。
awk '
NR==1{
split($0,U,"")
next}
{
s=split($0,A,"")
f=1
if(length(U)>s)
s=length(U)
for(i=1;i<=s;i++)
if(A[i]==U[i]&&f!=0)
printf("%s",A[i])
else {
f=0
U[i]=A[i]}
print ""}
'
答え3
2つのファイルが間違いなく異なる場合、1つの可能性は次のとおりです。
f1=FILE0000010985.LOG
f2=FILE0000010999.LOG
for ((l=0; l<${#f1}; l++))
do [[ ${f1:0:l} != "${f2:0:l}" ]] && break
done
printf "%s\n" "${f1:0:l-1}"
(ファイルが同じである可能性がある場合は、追加のテストを追加する必要があります。)