Shell script (transformar linha a linha em unica linha)
Pessoal,
Tenho um arquivo que está assim:
Citação:
dado1
dado2
dado3
dado4
dadon
Preciso que com algum comando eu faça com essas linhas fiquem todas em uma unica linha deixando um espaço entre eles:
Citação:
dado1 dado2 dado3 dado4 dadon
Já tentei o gawk, cat, sed e não consegui achar nada que faça isso. Como devo proceder?
Att,
Nataniel Klug
Shell script (transformar linha a linha em unica linha)
Povo,
Consegui resolver. Achei que precisava de tudo em uma linha e notei que o cat executando dentro de outro programa faria isso automaticamente.
O que eu precisava era remover alguns pacotes que estavam em uma lista, fiz o comando assim:
Código :
#rpm -e `cat pacotes-remover`
Resolvido... ;)
Att,
Nataniel Klug
Shell script (transformar linha a linha em unica linha)
Prá comemorar a TERCEIRA VEZ que uso esse algoritmozinho hoje só aqui no forum prá responder dúvidas, vou colocar aqui o codigozinho que fiz juto para isso hoje, para responder a dúvida de um companheiro de dúvidas.
Código :
#!/bin/bash
user=ana
domain=dominio.com.br
matches="$(cat /home/vpopmail/domains/${domain}/vpasswd | grep "${user}")"
for ((counter=1;$counter "<=" $(echo "$matches" | wc -l);counter=$(($counter+1)))); do
match="$(echo "${matches}" | head -n $counter | tail -n 1)"
if [ "$(echo "$match" | cut -f1 -d":")" == "${user}" ]; then
echo "${match}" | cut -f6 -d":"
break
fi
done
Esse é o código original que fiz pro moço. Agora vou modificá-lo afim de que ele leia um dado arquivo e faça justo o que vc quer; que troque os 'enters' por 'espaços':
Código :
#!/bin/bash
if [ -z "${1}" ]; then
file=~/lista.txt
else
file="${1}"
fi
final_result=
contents="$(cat $file)"
num_lines="$(echo "${matches}" | wc -l)"
for ((counter=1;$counter "<=" $num_lines;counter=$(($counter+1)))); do
currline="$(echo "${contents}" | head -n $counter | tail -n 1)"
final_result="${final_result}${currline} "
done
echo "${final_result}"
Alguma coisinha ou outra pode ser melhorada: mas esse aí faz o truque que você queria. :)
É útil usar dessa forma quando se precisar estudar linha por linha, ou tratar, pegar algum 'pedaço' da linha, como no exemplo original, eu comparo se a linha contém entre ':', a sequencia de letras da variável 'user', caso positivo ele toma um procedimento e interrompe a fiscalização das outras linhas restantes.
A outra vez que fiz isso foi para ajudar um cara a tentar fazer uma atualização entre dois MTA's mantendo um servidor de e-mail antigo funcionando enquanto o outro entrar: um pedaço desse script ajudou, a partir de uma lista com o nome dos usuários da máquina antiga, a criar o usuário e setar com redirecionamento para a MTA antiga. O pequeno pode fazer coisas graandes! :P
Shell script (transformar linha a linha em unica linha)
Avenger,
Muito obrigado. Consegui resolver antes, mas vou guardar seu código para que eu tenha ele no futuro quando eu precisar.
Att,
Nataniel Klug
Shell script (transformar linha a linha em unica linha)
eh, hehe eu vi que você tinha resolvido, mas eu não podia perder a oportunidade de colocar pela terceira vez o codiguim... no mesmo dia o mesmo scriptzinho responder 3 perguntas valeu 'forçar a barra' um pouco prá enfiar ele aqui no seu tópico hehe