Скрипт для awk
BEGIN{
FS="";
}
{
err=0;
for(i=1;i<=NF;i++) {
if(a[$i]++ > 0) {
err=1;
break;
}
}
if (!err) { print($0); }
delete a;
}
FS=""
- эта переменная означает, что поля разделены пустыми строками, то есть каждый символ будет отдельным полем
for(i=1;i<=NF;i++) {}
цикл по полям, то есть перебирается каждый символ.
if(a[$i]++ > 0) {}
в условии стоит постфиксный инкремент, поэтому if
сработает, если в массиве a
ненулевое значение для символа из $i
. Если же такого индекса нет, то a[$i]
инициализируется пустым значением, которое потом оператор ++
превратит в 1
.
Проверка:
echo -e '1234\nhello\n5432' | awk 'BEGIN{FS="";}{err=0;for(i=1;i<=NF;i++){if(a[$i]++>0){err=1;break;}}if(!err){print($0);}delete a;}'
Печатает 1234
и 5432