Сравнение N одинаковых непрерывных символов из набора двух файлов с последовательностями

Вы можете удалить ненужные символы с помощью${var//pattern/replacement}:

s='-w o rd'
s=${s//[- ]}

А затем используйте расширение подстроки для выбора одного символа за раз:

$ for ((i=0; i < ${#s}; i++)); do
      echo ${s:i:1};           # or do whatever you like here
  done

(похоже, он работает даже с многобайтовыми -символами, по крайней мере, в моей системе.)


Обратите внимание, что IFS='\0- 'будет назначать буквальную обратную косую черту для IFS, поскольку обратная косая черта не имеет особого значения в одинарных кавычках. Восьмеричный escape будет работать внутри $'...', но переменные в Bash не могут содержать байт NUL, так что это не помогает. (Строка обрезается на NUL, т.е. x=$'foo\0bar'; printf "%q\n" "$x"печатает только foo. Кроме того, как сказал @muru, разделение на байт NUL — это не то же самое, что разделение между каждым символом)

0
12.12.2020, 01:47
1 ответ
$ cat tst.awk
BEGIN { wid = 30 }
sub(/^>/,"") { hdr=$1; next }
NR == FNR { a[hdr]=$0; next }
{
    for ( hdrA in a ) {
        strA  = a[hdrA]
        lgthA = length(strA)
        for ( idxA=1; idxA<=(lgthA - wid + 1); idxA++ ) {
            substrA = substr(strA,idxA,wid)
            if ( index($0, substrA) ) {
                printf "[%s,%s]\n", hdrA, hdr
                break
            }
        }
    }
}

$ awk -f tst.awk file1 file2
[1,1]
[1,2]
4
18.03.2021, 22:43

Теги

Похожие вопросы