Предположим, что у меня есть список объектов (каждый объект в одной строке) как:
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 объекты.
С 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*
не имеет кавычек - в этом случае необходимо будет выйти из тех кавычек.
Я заметил, что Ваш список в качестве примера запустился с 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
Используйте sed
:
sed 's/^/SOMETEXT1\nSOMETEXT2\n/; s/$/\nSOMETEXT3/' input.txt
Можно использовать Vim в режиме Ex:
ex -sc '%s/.*/SOMETEXT1\rSOMETEXT2\r&\rSOMETEXT3/|x' file
%
выбор все строки
s
замена
x
сохраняет и закрывается
Использование 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