Этот awk делает это, если у вас есть минимальный awk (mawk
) или GNU awk (gawk
):
awk -F "" '
{
d=0
for(i=1;i<NF;i++){
if ($i==$(i+1)) d++
}
if (d==1) print
}' file
Установка поля в пустую строку (""
) вы можете прочитать каждая строка символьно! Если символ i
равен символу i+1
, то увеличивается d
. Если d==1
, строка печатается.
Из вашего образца:
$ cat file
1123456
1122345
1121125
1234567
1112345
Выводится:
1123456
Важное замечание:
В руководстве GNU awk говорится, что использование пустой строки в качестве разделителя полей является «темным углом», что означает, что она не является стандартной, и некоторые реализации могут обрабатывать ее по-разному. Если вы хотите быть уверены, что он будет работать с любым awk, go для
awk '
{
d=0
n=split($0,ch,"")
for(i=1;i<n;i++){
if (ch[i]==ch[i+1]) d++
}
if (d==1) print
}' file
Он прошел тест gawk --posix
и дает тот же результат.