Найти и заменить значения с помощью счетчиков

Извините, мой предыдущий вопрос был немного запутанным … У меня есть файл, который имеет такие значения, как:

location 100 SlotNumber ..some lines inbetween location 150 SlotNumber ..some lines inbetween location 160 SlotNumber ..some lines inbetween 

Я хочу заменить SlotNumber как SlotNumber:

 location 100 SlotNumber1 location 150 SlotNumber2 location 160 SlotNumber3 ... 

Обратите внимание, что 100 и 1 не имеют никакого отношения. Я хотел использовать какой-то счетчик в sed и заменить SlotNumber на «SlotNumber + Counter» и увеличивать его после каждого совпадения.

Я не знаю, сколько вхождений в этом файле.

Я не уверен, есть ли способ сделать это с Sed / awk. Может ли кто-нибудь помочь.

  • Как заменить только N-е вхождение шаблона в файл?
  • Что означает <<<?
  • Есть ли способ фильтрации и печати определенного шаблона без повторения кода?
  • Рекурсивный поиск / замена, учет глубины каталога
  • Sed и BBedit Html
  • Удалить последнюю запятую в шаблоне
  • Как заменить это регулярное выражение на пустое, используя sed
  • Как удалить все после определенного шаблона или строки в файле?
  • 2 Solutions collect form web for “Найти и заменить значения с помощью счетчиков”

    Начиная с основного файла здесь …

     $ cat file location 100 Number location 101 Number location 102 Number 

    Мы можем соответствовать всем строкам:

     $ awk '{print $0 NR}' file location 100 Number1 location 101 Number2 location 102 Number3 

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

     $ cat file location 100 SlotNumber ..some lines inbetween location 150 SlotNumber ..some lines inbetween location 160 SlotNumber ..some lines inbetween 

    Мы можем печатать только строки местоположения:

     $ awk 'BEGIN {x=1} /^location/ {print $0 x++}' file location 100 SlotNumber1 location 150 SlotNumber2 location 160 SlotNumber3 

    Или все они, только добавляя номера для номеров слотов.

     $ awk 'BEGIN {x=1} {if ($3=="SlotNumber") {print $0 x++} else {print $0} }' file location 100 SlotNumber1 ..some lines inbetween location 150 SlotNumber2 ..some lines inbetween location 160 SlotNumber3 ..some lines inbetween 

    Вот хороший сайт для некоторых основных объяснений awk-then-else для awk.

    http://www.thegeekstuff.com/2010/02/awk-conditional-statements/

    Если вы хотите чередовать номера строк, на всякий случай, если ваш файл перепутал числа, подобные этому

     location 100 Number location 101 Number location 102 Number location 104 Number location 103 Number .. .. location 199 Number location 200 Number 

    Вы можете попробовать что-то вроде этого. Предполагается, что число начинается с 100.

     while read line do num=`echo $line | cut -f2 -d ' '` val=`expr $num - 100` echo "$line$val" done < ln.txt 

    Это печатает

     location 100 Number0 location 101 Number1 location 102 Number2 location 104 Number4 location 103 Number3 .. location 199 Number99 location 200 Number100 

    EDIT: Благодаря @Scott, упрощенное выражение эха и удалена ненужная строка.

    Interesting Posts

    Установка переключаемых графических драйверов на Linux Mint

    Как определить ошибку в определенном файле при проверке контрольной суммы (какой файл имеет проблему при проверке) в сценарии оболочки

    Цепная труба | с &&

    tshark dump только при сопоставлении строки

    Загрузите приложение с нагрузкой модуля и укажите другое имя по умолчанию

    Настройка запроса proftpd и mod_ldap.c не работает – любые идеи?

    Обновление Yum не работает должным образом в centos

    Линтиан также проверяет различия между уровнями политики в данном пакете?

    В чем разница между тем, чтобы nohup не добавлял «nohup.out» и явно перенаправлял его в файл?

    как разделить длинную команду psql в скрипте bash на несколько строк

    Ни Chromium, ни Chrome не начнут Lubuntu

    Минималистичный Framebuffer, показывающий только текст и прогресс

    NFSv4, какой «домен» помещать в idmapd.conf?

    Включение драйвера brcmfmac для Wi-Fi на Macbook Pro

    Оптимальная настройка для Windows и Linux – совместное использование и разделение

    Linux и Unix - лучшая ОС в мире.