Добавлять разные значения к четным и нечетным строкам в списке - PullRequest
0 голосов
/ 09 июня 2018

Мне нужно добавить следующий список:

urack-L-
urack-L-
urack-L-
urack-L-
urack-L-

с помощью urack-L-

urack-L-100
urack-L-101
urack-L-100
urack-L-101
urack-L-100  

и так далее ...

У меня нетудалось найти метод, отличный от инкрементного (100, 101, 102 и т. д.). Какие-нибудь короткие и приятные трюки?

Ответы [ 4 ]

0 голосов
/ 09 июня 2018
 :%s/$/\=(line(".")%2==0?"101":"100")/


 % ................ whole file
 s ................ substitute 
 $ ................ end of line
 \=(line(".") ..... gets the number of the current line
 %2==0? ........... if the rest of division equals zero

Ссылка ссылка .

0 голосов
/ 09 июня 2018

Если у вас есть GNU sed, вы можете использовать расширение для адресов:

sed '1~2s/$/100/;2~2s/$/101/' infile

, где адрес <em>first</em>~<em>step</em> соответствует строке с адресом first, а затем каждый step ая строка.

Или, как указано в комментарии ctac:

sed 's/$/100/;n;s/$/101/' infile

При этом используется команда n для печати пространства шаблона (содержащегонечетная строка) и загрузка следующей (четной) строки в нее.Это должно работать с любым POSIX-совместимым sed.

0 голосов
/ 09 июня 2018

awk:

awk '{printf "%s%d\n", $0, 101 - NR % 2}' file

Переменная NR содержит текущий номер записи, по умолчанию текущий номер строки.NR % 2 оценивается как 0 или 1 для четных или нечетных строк.

0 голосов
/ 09 июня 2018

Это не подходит для sed.Просто используйте цикл оболочки с проверяемой переменной.

i=100
while read line
do
    echo "$line$i"
    if [[ i == 100 ]]
    then i=101
    else i=100
    fi
done < inputfile > outputfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...