como dar quebra de linha após ocorrencia

1. como dar quebra de linha após ocorrencia

marcio mendes mendes
conectadohost

(usa XUbuntu)

Enviado em 10/08/2017 - 08:18h

olá,
tenho uma lista com varios nomes de backups tudo em uma linha só
a ideia seria a cada 10 nomes dar uma quebra de linha
a lista tem mais de 700 nomes tudo em uma linha só
exemplo:
cpmove-usuario1.tar.gz cpmove-usuario2.tar.gz cpmove-usuario3.tar.gz
e assim por diante cerca de 700 e pode aumentar com o tempo
precisava dar uma quebra de linha a cada 10 nomes desses usuarios
eu pensei em usar o sed tipo a cada 10 vezes que se repetir a extensão .gz dar uma quebra de linha
desse modo a lista ficaria com 10 nomes de backups em cada linha.
só que eu só encontrei comando pra dar quebra de linha após cada palavra
desse modo não serviria
sed 's/ /\n/g'



  


2. Re: como dar quebra de linha após ocorrencia

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 10/08/2017 - 11:16h

Experimenta assim:
xargs -n10 <arquivo1 >arquivo2 



3. Re: como dar quebra de linha após ocorrencia

marcio mendes mendes
conectadohost

(usa XUbuntu)

Enviado em 10/08/2017 - 11:55h

Olá,
Obrigado pelo ajuda deu a quebra de linha no decimo nome
unico problema que deletou um nome
por exemplo se tiver 12 nomes ele da a quebra no decimo deleta um e o restante vai para a linha de baixo
se não deletar esse um ia ficar top.


---> Márcio M M <---


4. Re: como dar quebra de linha após ocorrencia

Jose Renan Assis
JoseRenan

(usa Ubuntu)

Enviado em 10/08/2017 - 14:03h

Uma solução talvez não tão elegante, considerando um espaço separando :

#!/bin/bash
declare -a vetor10
vetor=(${vetor[@]} `cat arquivo.txt`);
qtdItens=${#vetor[@]};
aux=0;
if [ $qtdItens -le 10 ]; then
echo ${vetor[@]};
else
let "resto= qtdItens%10";
let "linhas= qtdItens/10";

##Salva em vetores de 10 itens
for ((index=0; index <= $linhas; index++));
do
vetor10[$index]=''${vetor[$aux]}' '${vetor[$indiceLinha + $aux + 1]}' '${vetor[$indiceLinha + $aux + 2]}' '${vetor[$indiceLinha + $aux + 3]}' '${vetor[$indiceLinha + $aux + 4]}' '${vetor[$indiceLinha + $aux + 5]}' '${vetor[$indiceLinha + $aux + 6]}' '${vetor[$indiceLinha + $aux + 7]}' '${vetor[$indiceLinha + $aux + 8]}' '${vetor[$indiceLinha + $aux + 9]}'';
echo ${vetor10[$index]};
let "aux=aux + 10";
done

case $resto in
1) vetor10[$aux]=''${vetor[$aux]}'' ;;
2) vetor10[$aux]=''${vetor[$aux]}' '${vetor[$aux + 1]}'' ;;
3) vetor10[$aux]=''${vetor[$aux]}' '${vetor[$aux + 1]}' '${vetor[$aux + 2]}'' ;;
4) vetor10[$aux]=''${vetor[$aux]}' '${vetor[$aux + 1]}' '${vetor[$aux + 2]}' '${vetor[$aux + 3]}'' ;;
5) vetor10[$aux]=''${vetor[$aux]}' '${vetor[$aux + 1]}' '${vetor[$aux + 2]}' '${vetor[$aux + 3]}' '${vetor[$aux + 4]}'' ;;
6) vetor10[$aux]=''${vetor[$aux]}' '${vetor[$aux + 1]}' '${vetor[$aux + 2]}' '${vetor[$aux + 3]}' '${vetor[$aux + 4]}' '${vetor[$aux + 5]}'' ;;
7) vetor10[$aux]=''${vetor[$aux]}' '${vetor[$aux + 1]}' '${vetor[$aux + 2]}' '${vetor[$aux + 3]}' '${vetor[$aux + 4]}' '${vetor[$aux + 5]}' '${vetor[$aux + 6]}'' ;;
8) vetor10[$aux]=''${vetor[$aux]}' '${vetor[$aux + 1]}' '${vetor[$aux + 2]}' '${vetor[$aux + 3]}' '${vetor[$aux + 4]}' '${vetor[$aux + 5]}' '${vetor[$aux + 6]}' '${vetor[$aux + 7]}'' ;;
9) vetor10[$aux]=''${vetor[$aux]}' '${vetor[$aux + 1]}' '${vetor[$aux + 2]}' '${vetor[$aux + 3]}' '${vetor[$aux + 4]}' '${vetor[$aux + 5]}' '${vetor[$aux + 6]}' '${vetor[$aux + 7]}' '${vetor[$aux + 8]}'' ;;
esac
echo ${vetor10[$aux]}
fi



5. Re: como dar quebra de linha após ocorrencia

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 10/08/2017 - 16:24h

conectadohost escreveu:

Olá,
Obrigado pelo ajuda deu a quebra de linha no decimo nome
unico problema que deletou um nome
por exemplo se tiver 12 nomes ele da a quebra no decimo deleta um e o restante vai para a linha de baixo
se não deletar esse um ia ficar top.

---> Márcio M M <---


Cara, nos meus testes aqui foi sem problemas. Cola aqui uma amostra do seu arquivo!!!

Tenta esse outro comando:
awk '{ for ( i = 1; i <= NF; i++ ) { printf "%s%c", $i, (i % 10 == 0) ? ORS : OFS } }' arquivo > resultado 



6. Re: como dar quebra de linha após ocorrencia

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/08/2017 - 17:46h

conectadohost escreveu:

olá,
tenho uma lista com varios nomes de backups tudo em uma linha só
a ideia seria a cada 10 nomes dar uma quebra de linha
a lista tem mais de 700 nomes tudo em uma linha só
exemplo:
cpmove-usuario1.tar.gz cpmove-usuario2.tar.gz cpmove-usuario3.tar.gz
e assim por diante cerca de 700 e pode aumentar com o tempo
precisava dar uma quebra de linha a cada 10 nomes desses usuarios
eu pensei em usar o sed tipo a cada 10 vezes que se repetir a extensão .gz dar uma quebra de linha
desse modo a lista ficaria com 10 nomes de backups em cada linha.
só que eu só encontrei comando pra dar quebra de linha após cada palavra
desse modo não serviria
sed 's/ /\n/g'


Boa tarde, segue sugestão:

Onde:
for i in {1..1000};do echo -n "Linux_${i}.txt ";done >> linha
NOMES=($(cat linha))

for ((x=0;x<${#NOMES[@]};x++));do if ((x%10==0));then y=$((x+9)); for n in $(seq $x $y);do echo -n "${NOMES[n]} ";done;echo -e "";fi; done


att.:
marcelo oliver


7. Re: como dar quebra de linha após ocorrencia

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 10/08/2017 - 20:49h

HCK escreveu:

Experimenta assim:
xargs -n10 <arquivo1 >arquivo2 


aqui funcionou de boa, não excluiu nada !!!
mauricio@phantom ~ $ wc -w tt.txt
3961 tt.txt
mauricio@phantom ~ $ xargs -n10 < tt.txt > tt1.txt
mauricio@phantom ~ $ wc -w tt1.txt
3961 tt1.txt
mauricio@phantom ~ $


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts