Использование команды sed для замены одного набора значений из конкретной строки и конкретной позиции - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть текстовый файл, например

    -7.9     8.5    1235  125478.30   9632
    32656.12   0.0   0.0    2365.12      h
    254    3365    12543     kk       l423

Моя цель - заменить позицию, в которой 2365.12, встречается другой переменной.Это будет происходить в цикле для большего числа итераций.

Изначально я использовал sed для замены значения в кавычках.Но у меня были проблемы с происшествиями.Такое же значение может быть в той же строке раньше.Но я хочу, чтобы именно эта позиция значения была заменена.

Следовательно, я использовал следующую команду, которая примет во внимание позиции для замены.

   sed -i"3s/^\(.\{32\}\)\(.\{7\}\)\(.*\)/1$variable\3" outputdata.txt

Теперь моя проблема здесь, когда значение с меньшим количеством цифр заменяется в одном цикле, следующие значения приближаются.И, следовательно, во время следующего цикла счетчик позиций портится со следующим значением.

Следовательно, было бы так здорово, если бы кто-нибудь смог мне помочь таким способом, которым я мог бы заменить набор позиций, которыетолько не пробел или замените следующий набор значений или оставшуюся часть строки пробелом, предшествующим каждой замене.или другой метод, в котором я могу указать это значение и заменить его.

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

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Просто используйте printf, например:

$ for x in 1 1000; do echo "foo [$(printf '%7s' $x)] bar"; done
foo [      1] bar
foo [   1000] bar

В вашем случае это будет означать замену $variable на $(printf '%7s' $variable).

0 голосов
/ 27 ноября 2018

Если я правильно понимаю ваш вопрос, то вы ищете следующее:

 $ awk -v myvariable='XXXXX'  '{ if( $4 == "2365.12" ) { $4 = myvariable }; print $0}' input.txt
-7.9     8.5    1235  125478.30   9632
32656.12 0.0 0.0 XXXXX h
254    3365    12543     kk       l423

Пожалуйста, дайте мне знать, если это поможет.

Кроме того, если вы хотите, чтобы это произошло вконкретную строку вы можете использовать:

awk -v myvariable='XXXXX'  '{ if( $4 == "2365.12" && NR == 2 ) { $4 = myvariable }; print $0}' input.txt

, где NR - номер строки.

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