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

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

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. Может ли кто-нибудь помочь.

  • Греблирование фигур строки для создания новой строки
  • выбор строки из записи в файле
  • Заменить контент внутри двух конкретных строк
  • Выключение как косой черты, так и обратной косой черты с помощью sed
  • Как использовать sed для замены строк, в которых есть «\»?
  • Как разбить список имен файлов в наборах 5 ГБ?
  • относительно портативный sed -e ... db или! б?
  • Использование 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, упрощенное выражение эха и удалена ненужная строка.

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