Inserir linha em branco no UNIX após um número diferente de linhas

1

Suponha que eu tenha um arquivo abc.csv com os dados abaixo:

abc
def
geh
ijk
lmn
opq
rst

Agora, quero inserir linhas em branco após a linha 2 e a linha 6.

Por favor, sugira qual comando devo usar.

    
por Nikhil Sinha 12.08.2015 / 17:04

4 respostas

7

$ seq 10 | sed '2G;6G'
1
2

3
4
5
6

7
8
9
10

O comando G sed acrescenta uma nova linha, seguida do conteúdo do espaço de espera (aqui vazio, pois não colocamos nada nele) no espaço de padrão. Portanto, é uma maneira rápida de adicionar uma linha vazia abaixo da linha correspondente.

Outras alternativas são o comando a e s :

sed '2a\

6a\
'

Ou:

sed '2s/$/\
/
6s/$/\
/'

Alguma implementação sed também suporta:

sed '2s/$/\n/;6s/$/\n/'
    
por 13.08.2015 / 10:48
1
sed -e '2a\ ' -e '6a\ ' input > output && mv output input

Alguns sabores sed (1) têm uma opção -i para operar em um arquivo "no local" (mas isso não é portátil), ou tente sponge de moreutils, mas ambos os métodos estão meramente escondendo o write-to-new-file-e- rename(2) -system-call que o mv faz (se o arquivo de saída estiver no mesmo sistema de arquivos).

    
por 13.08.2015 / 01:12
0

Isso deve funcionar:

awk 'NR==3||NR==7 {print " "} {print $0}' abc.csv > temporary.csv && mv temporary.csv abc.csv
    
por 12.08.2015 / 17:19
0

Você pode usar o Vim no modo Ex:

ex -sc '6pu_|2pu_|x' abc.csv
  1. pu_ anexar linha em branco

  2. x salvar e fechar

por 12.04.2016 / 05:33

Tags