Como adiciono um texto fixo antes e depois de cada item de uma lista em um arquivo txt?

0

Suponha que eu tenha uma lista de itens (cada item em uma linha) como:

apple
banana
grape
orange
...
...

Eu quero colocar um texto fixo antes e depois de cada item; O arquivo txt da saída deve se parecer com:

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

SOMETEXT1 , SOMETEXT2 e SOMETEXT3 são constantes.

Como posso conseguir isso? Qualquer idioma pode ser usado. A lista tem quase 10 ^ 7 itens.

    
por rsl 17.01.2016 / 20:20

5 respostas

2

com awk :

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

Se você quiser substituir o arquivo atual, use -i inplace , com GNU awk :

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

Isso funcionará enquanto SOMETEXT* não tiver aspas - nesse caso, você terá que escapar dessas citações.

    
por muru 17.01.2016 / 20:26
2

Use sed :

sed 's/^/SOMETEXT1\nSOMETEXT2\n/; s/$/\nSOMETEXT3/' input.txt
    
por Florian Diesch 17.01.2016 / 20:27
0

Notei que sua lista de exemplos começou com SOMETEXT3, então escrevi o exemplo abaixo com isso em mente.

#!/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
    
por BenK 17.01.2016 / 20:30
0

Usando o Perl:

perl -ne 'print("SOMETEXT1\nSOMETEXT2\n${_}SOMETEXT3\n")' file
  • -n : faz com que o Perl assuma o seguinte loop em torno do seu programa, o que faz com que seja iterado sobre argumentos de nome de arquivo como sed -n ou awk:

    LINE:
      while (<>) {
          ...             # your program goes here
      }
    
  • -e : pode ser usado para inserir uma linha do programa.

  • print("SOMETEXT1\nSOMETEXT2\n${_}SOMETEXT3\n") : imprime SOMETEXT1 seguido por uma nova linha, seguido por SOMETEXT2 seguido por uma nova linha seguida pela linha atual seguida por SOMETEXT3 .

Garante certos caracteres especiais, como, por exemplo, \ e " in SOMETEXTN são escapados corretamente.

Para processar o arquivo no local, você pode adicionar o -i swith ao comando:

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
    
por kos 17.01.2016 / 20:53
0

Você pode usar o Vim no modo Ex:

ex -sc '%s/.*/SOMETEXT1\rSOMETEXT2\r&\rSOMETEXT3/|x' file
  1. % seleciona todas as linhas

  2. s substituto

  3. x salvar e fechar

por Steven Penny 16.04.2016 / 20:25