Как я добавляю фиксированный текст прежде и после каждого объекта списка в txt файле?

Предположим, что у меня есть список объектов (каждый объект в одной строке) как:

apple
banana
grape
orange
...
...

Я хочу поместить некоторый фиксированный текст прежде и после каждого объекта; вывод txt файл должен быть похожим:

SOMETEXT1
SOMETEXT2
apple
SOMETEXT3
SOMETEXT1
SOMETEXT2
banana
SOMETEXT3
SOMETEXT1
SOMETEXT2
grape
SOMETEXT3
SOMETEXT1
SOMETEXT2
orange
SOMETEXT3
...
...

SOMETEXT1, SOMETEXT2 и SOMETEXT3 являются постоянными.

Как я могу выполнить это? Любой язык может использоваться. Список имеет почти 10^7 объекты.

0
задан 17 January 2016 в 22:54

5 ответов

С awk:

awk '{printf "%s\n%s\n%s\n%s\n", "SOMETEXT1", "SOMETEXT2", $0, "SOMETEXT3"}' input-file

Если Вы хотите заменить текущий файл, использовать -i inplace, с GNU awk:

gawk -i inplace '{printf "%s\n%s\n%s\n%s\n", "SOMETEXT1", "SOMETEXT2", $0, "SOMETEXT3"}' input-file

Это будет работать пока SOMETEXT* не имеет кавычек - в этом случае необходимо будет выйти из тех кавычек.

2
ответ дан 29 September 2019 в 14:06

Я заметил, что Ваш список в качестве примера запустился с SOMETEXT3, таким образом, я записал пример ниже с этим в памяти.

#!/bin/bash
sourceList=/path/to/source.list
newfile=/path/to/newfile

while read Line; do
  echo $SOMETEXT3 >> $newfile
  echo Line >> $newfile
  echo $SOMETEXT1 >> $newfile
  echo $SOMETEXT2 >> $newfile
done < $sourceList
0
ответ дан 29 September 2019 в 14:06

Используйте sed:

sed 's/^/SOMETEXT1\nSOMETEXT2\n/; s/$/\nSOMETEXT3/' input.txt
2
ответ дан 29 September 2019 в 14:06

Можно использовать Vim в режиме Ex:

ex -sc '%s/.*/SOMETEXT1\rSOMETEXT2\r&\rSOMETEXT3/|x' file
  1. % выбор все строки

  2. s замена

  3. x сохраняет и закрывается

0
ответ дан 29 September 2019 в 14:06

Использование Perl:

perl -ne 'print("SOMETEXT1\nSOMETEXT2\n${_}SOMETEXT3\n")' file
  • -n: Perl причин для принятия следующего цикла вокруг программы, которая заставляет его выполнить итерации по аргументам имени файла несколько как sed-n или awk:

    LINE:
      while (<>) {
          ...             # your program goes here
      }
    
  • -e: может использоваться для ввода одной строки программы.

  • print("SOMETEXT1\nSOMETEXT2\n${_}SOMETEXT3\n"): печать SOMETEXT1 сопровождаемый новой строкой, сопровождаемой SOMETEXT2 сопровождаемый новой строкой, сопровождаемой текущей строкой, сопровождаемой SOMETEXT3.

Удостоверяется потенциальные специальные символы такой как, например. \ и " в SOMETEXTN оставлены правильно.

Для обработки файла, оперативного, можно добавить -i swith к команде:

perl -i -ne 'print("SOMETEXT1\nSOMETEXT2\n${_}SOMETEXT3\n")' file
% cat file
apple
banana
grape
orange
% perl -ne 'print("SOMETEXT1\nSOMETEXT2\n${_}SOMETEXT3\n")' file
SOMETEXT1
SOMETEXT2
apple
SOMETEXT3
SOMETEXT1
SOMETEXT2
banana
SOMETEXT3
SOMETEXT1
SOMETEXT2
grape
SOMETEXT3
SOMETEXT1
SOMETEXT2
orange
SOMETEXT3
0
ответ дан 29 September 2019 в 14:06

Другие вопросы по тегам:

Похожие вопросы: