Quero colocar todas as linhas de um texto em uma linha. Sou iniciante em codificação tentando aprender fazendo. Passei quatro horas tentando resolver esse problema. Eu sei que há uma solução simples para esse problema. Aqui está o que eu tenho tentado.
sed -e 'N; s / \ n //' myfile.txt # Não faz nada sed -e: a -e N -e 's / \ n / /' -e ta myfile.txt #output tudo bagunçado e eu não consigo entender a sintaxe cat myfile.txt | tr -d '\ n'> myfile.txt # Exclui todas as linhas
Aqui está o arquivo de texto:
500212 262578-4-4 23200 GRIFFITH LABORATORIES LTD LABORATÓRIOS GRIFFITH CONSELHO DO SUL DE DUBLIN COUNTY ESCRITÓRIO ESCRITÓRIO (INDUSTRIAL) Lista tributável 2 Pineview Industrial Estate Firhouse Road Knocklyon 31 dez 2007 01 Jan 2008 "
Não consigo descobrir onde errei ...
cat reval_details.asp?Pno=500211.txt | tr -d '\n' > new_reval_details.asp?Pno=500211.txt
tr -d '\n' <input.txt > output.txt
- que evita o uso inútil do gato e usa menos um tubo desnecessário.Aqui está. É outra solução e simples e fácil.
fonte
echo `cat Input.txt` > Output.txt
funciona também, apenas outratr
solução.MÉTODO SIMPLES
Outro método usando awk,
Saída:
Nota:
ORS = '' -> Este é o seu separador de campos, você pode ter qualquer caractere entre as aspas simples como um separador de campos. Usando esse método awk, podemos incluir espaços e todos os caracteres.
Espero que isso possa ajudar!
fonte
man awk
Não há necessidade de colocar o rótulo
:a
fora da instrução principal, nem a-e
opção necessária; finalmente,/$/
é supérfluo (toda linha tem um caractere EOL).Melhorando outras respostas, obtém-se
O que é mais claro se escrito da seguinte maneira,
O comando funciona da seguinte maneira:
N
anexa a próxima linha ao espaço do padrão (multilinha), que já contém a linha atual;s/\n/ /
substitua o caractere de nova linha\n
gerado porN
com um espaço;
ta
vai para a linha de script após o rótulo:a
, desde que a substituição na etapa 2 tenha sido bem-sucedida , ou seja , se a substituição ocorreu, a execução salta para a etapa 1 sem "atingir" o final do script, ou seja , sem ler outra linha de entrada.Observe o seguinte;
sed
lê as linhas do arquivo de entrada uma por uma em ordem, começando na 1ª linha ;:a
é apenas um rótulo, não um comando a ser executado;N
é, em princípio, executado em qualquer linha, mass/\n/ /
(em princípio executado em qualquer linha) é bem - sucedido em qualquer linha, exceto a última , portantota
torna o final do script acessível somente quando a última linha de entrada é lida (a única linha em ques
falha);p
comando implícito é executado.Portanto, o script basicamente lê a 1ª linha de entrada e continua anexando as seguintes linhas, uma a uma, sempre substituindo a nova linha por um espaço; depois que a última linha é anexada (e
\n
alterada em um espaço),N
não é possível anexar nenhuma linha,s
falha,ta
é ignorada, o final do script é atingido e ap
instrução rint implícita é executada no espaço padrão atual de 1 linha mais longo .A
-i
opção substitui o arquivo de entradafile
com todo o espaço padrão de 1 linha.fonte
GEDIT:
Pesquise e substitua
\n
por um espaço ''.Você pode obter a janela substituir, indo para 'Pesquisar' -> 'Substituir'
ou através do keybpard atalho Ctrl+H
Veja a captura de tela abaixo:
Seu texto original está nas linhas 1-14.
O resultado está na linha 16.
fonte
Eu acho que a maneira mais fácil de fazer isso é:
http://ss64.com/bash/paste.html
fonte
Tente isto
http://anandsekar.github.io/joining-all-lines-in-a-file-using-sed/
fonte
Eu acho que você estava simplesmente esquecendo que precisava dizer ao sed para redirecionar a saída do yourfile.txt para o resultado desejado, newfile.txt. Este parece ser o comando que você precisa, mas somente se os arquivos que você está tentando mesclar não são grandes demais para buffers de sed:
sed -e :a -e N -e 's/\n/ /' -e ta yourfile.txt >newfile.txt
. Crédito para outro fórum aqui , onde eles discutem as capacidades do sed. Eu testei o comando e funcionou para mim.fonte
-i
comutador modificará o arquivo original embutido , então não há necessidade de enviar para outro arquivo. Tenha cuidado!a' sed -i :a -e N -i 's/\n/ /' -e ta reval_details.asp?Pno=500214.txt sed: can't find label for jump to
um' sed -e: a -e N -i 's / \ n / /' -e ta reval_details .asp? Pno = 500214.txt sed: não é possível ler s / \ n / /: Não existe esse arquivo ou diretório #Any ideas.Solução de bash pura:
fonte
Se fosse eu, eu iria abrir no vim e pressionar Shift+ Jalgumas vezes.
fonte
Digite dentro do vim e pressione Enter:
fonte
Abordagem Python:
AWK:
fonte