divide o arquivo em pedaços incluindo mais linhas na primeira parte

2

Estou tentando separar um arquivo grande com 4100 linhas. Separando 6 linhas de números como arquivo e outras linhas precisam seguir como 4 linhas de números como arquivo. Por favor, considere o abaixo.

Como posso escrever um script bash?

    
por shi 13.03.2017 / 02:24

3 respostas

1

Você poderia tentar com awk :

awk '{if (NR>6){if ((NR-6)%4==1){++c}} else {c=1}};{print >"file"c".las"}' infile

Em um gnu setup e com uma versão relativamente recente split que permite adicionar um sufixo também poderia fazer algo como:

{ printf %s\n\n; cat infile; } | split -d -l 4 --additional-suffix='.las' - file
( set ./*.las
sed '1d
s/\/&&/g
2c\
1i\
3s/$/\/' "$1" | sed -f - -i "$2"
rm -f "$1" )

isto é, imprima duas linhas vazias e depois o arquivo, dividindo a saída combinada em pedaços de quatro linhas, inserindo as duas primeiras linhas da entrada original via sed (depois de escapar das barras invertidas - se houver) na segunda parte e finalmente removendo a primeira peça. Embora tenha em mente que isso irá zerar os nomes dos pedaços para que você acabe com file0001.las etc

    
por 13.04.2017 / 14:36
1

O comando a seguir será dividido conforme descrito, presumindo-se que o arquivo deve ser dividido a cada quatro linhas. Os arquivos de saída serão nomeados e. g. output00 , output01 e assim por diante. Você pode renomear todos os arquivos output* para anexar o sufixo .las ao final e, se desejar, remover os zeros à esquerda.

split -l4 -d ./input_file output
    
por 13.03.2017 / 02:37
0
csplit -s -k -f file. inoutfile '/^/+6' '/^/+4' '{*}'
    
por 13.03.2017 / 09:13