Извлечь каждую n-ую букву (число) - PullRequest
2 голосов
/ 03 сентября 2010

У меня есть файл со строкой: имя, пробел и строка из нуля и единицы, и мне нужно извлечь каждый 5-й символ строки из нуля и единицы, сделать сумму результатов, а если сумма не равна 0 - сохраните имя в другом файле.

1rt2 0001000000100000000000001010000100000000010000001000000100010010000000000000
1gh4 0001000000100000000000001010000100000000010000001000000100000010000000000000
3fg5 1000000100010010000000000000100000010000000001000000100000010000000000000000
45gh 1000000100000010000000000000100000010000000001000000000100010000000000000000

Вопрос: как извлечь каждую 5-ю цифру (букву) цепочки битов? Чем проще решение - тем лучше ...

Спасибо большое заранее!

Ответы [ 4 ]

1 голос
/ 03 сентября 2010
sed -e '/ \(.........\)*........1/s/^\([^ ]*\) .*$/\1/;t;d'

Сопоставьте строки, которые имеют 1 в позиции, кратной 9 (для этих строк сумма не будет 0), и напечатайте часть имени файла этой строки. Все остальные строки не печатаются.

sed -e '/ \(.....\)*....1/s/^\([^ ]*\) .*$/\1/;t;d'

выполнит работу за каждые 5 или 0 *.

0 голосов
/ 04 сентября 2010
awk '{
 name=$1
 m=split($2,n,"")
 for(o=1;o<=m;o+=4){
   total+=n[o]
 }
 if(total>0){
    print name > "file"
 }
}' file
0 голосов
/ 03 сентября 2010

Читает из стандартного ввода:

#!/bin/bash

while read name bits; do
    (($(sed 's/....(.)/$1/g' <<< "$bits") > 0)) && echo "$name"
done

Читает каждую строку, использует sed для извлечения каждого пятого бита, а затем сравнивает это число с ((num > 0)).Прочитайте && как если-то: если число больше нуля, введите имя.

0 голосов
/ 03 сентября 2010

Try ....(.).

  • .... соответствует четырем произвольным буквам
  • (.) соответствует пятой букве и захватывает ее.

Я не уверен в синтаксисе регулярных выражений sed / awk, поэтому вам, возможно, придется избегать паренов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...