Как удалить все альтернативные цифры с помощью Unix - PullRequest
0 голосов
/ 26 декабря 2011

У меня есть файл, этот файл содержит число, подобное этому 343434343434343434343434.

Я хочу удалить каждую альтернативную цифру

Ввод: 343434343434343434343434

Желаемый выход: 444444444444

Ответы [ 5 ]

3 голосов
/ 26 декабря 2011

Мне не ясно, хотите ли вы удалить первый, третий, пятый, ... символ или второй, четвертый, шестой ... символ.

Если первое,

$ echo 'abcdefghijklmnopqr' | perl -pe 's/.(?:(.)|$)/$1/g'
bdfhjlnpr

Если последнее,

$ echo 'abcdefghijklmnopqr' | perl -pe 's/(.)(?:.|$)/$1/g'
acegikmoq

[EDIT: Команды sed в предыдущей версии ответа не правильно обрабатывали ввод с нечетным количеством символов в строке. ]

Это безразлично к содержимому файла , за исключением , что он сохранит границы строк. Если вы хотите удалить символы новой строки, которые оказываются с нечетным (или четным) смещением от начала файла, вам нужно сделать что-то более сложное - в этот момент я, вероятно, достигну C, поскольку проще игнорировать строку Границы понятны в C, чем с любой из утилит оболочки:

#include <stdio.h>
int main(void)
{
    int c1, c2;
    for (;;) {
        c1 = getchar();
        c2 = getchar();
#ifdef PRINT_THE_EVEN_CHARACTERS
        if (c1 == EOF || c2 == EOF) break;
        putchar(c2);
#else
        if (c1 == EOF) break;
        putchar(c1);
        if (c2 == EOF) break;
#endif
    }
    return 0;
}
1 голос
/ 26 декабря 2011

Это может работать для вас:

<<<"3434343434343434343434343" sed 's/.4\?/4/g'
444444444444

Или точнее:

<<<"3434343434343434343434343" sed 's/[[:digit:]][^[:digit:]]*\([[:digit:]]\?\)/\1/g'
444444444444
0 голосов
/ 28 декабря 2011
$ echo 3434343434 | 
    dd cbs=2 conv=unblock 2>/dev/null |
    cut -c1|
    tr -d "\n" ; echo 
33333
0 голосов
/ 26 декабря 2011

Если у вас есть сродство к awk

awk '{for(i=1;i<=NF;i+=2)printf $i}END{print ""}' FS=""

0 голосов
/ 26 декабря 2011

Вы можете просто:

sed -i 's/3//g' thefile

Удалите опцию -i, чтобы сначала проверить.

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