Aqui está uma com xargs
xargs -n1 < file.txt
Demo:
$ cat file.txt
106849_01373 106849_01967 106850_00082 23025.7_01059
$ xargs -n1 < file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
Eu tenho um arquivo .txt com números ordenados como este (na mesma linha):
106849_01373 106849_01967 106850_00082 23025.7_01059
Eu gostaria de convertê-los assim:
106849_01373
106849_01967
106850_00082
23025.7_01059
Não tenho ideia de qual comando usar. Alguém pode me ajudar com isso?
Aqui está uma com xargs
xargs -n1 < file.txt
Demo:
$ cat file.txt
106849_01373 106849_01967 106850_00082 23025.7_01059
$ xargs -n1 < file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
Bastante fácil com tr
:
tr -s '[:blank:]' '\n' <file.txt
Exemplo:
% cat file.txt
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
% tr -s '[:blank:]' '\n' <file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
A resposta do heemayl é o caminho a seguir, mas aqui está uma alternativa usando o Perl:
perl -lane '$,="\n"; print(@F)' file.txt
-l
: ativa o processamento automático de finalização de linha. Tem dois efeitos separados. Primeiro, ele automaticamente efetua chps $ / (o separador de registro de entrada) quando usado com -n ou -p. Segundo, ele atribui $ \ (o separador de registro de saída) para ter o valor de octnum, de forma que quaisquer instruções de impressão tenham esse separador novamente incluído. Se octnum for omitido, define $ \ para o valor atual de $ /. -a
: ativa o modo de preenchimento automático quando usado com um -n ou -p. Um comando split implícito para o array @F é feito como a primeira coisa dentro do loop while implícito produzido por -n ou -p. -n
: faz com que o Perl assuma o seguinte loop em torno do seu programa, o que faz com que seja iterado sobre argumentos de nome de arquivo como sed -n ou awk:
LINE:
while (<>) {
... # your program goes here
}
-e
: pode ser usado para inserir uma linha do programa;
$,="\n"
: define o separador do campo de saída para uma nova linha; print(@F)
: imprime os campos separados pelo separador do campo de saída. % cat file.txt
106849_01373 106849_01967 106850_00082 23025.7_01059
% perl -lane '$,="\n"; print(@F)' file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
AWK
abordagem. Basicamente, alterar o separador de saída para campos e loop. O arquivo de teste é seu exemplo colado repetidamente com ENDLINE no final
$ awk 'BEGIN{OFS="\n"}{for(i=1;i<=NF;i++) print $i}' some_data
106849_01373
106849_01967
106850_00082
23025.7_01059
ENDLINE
106849_01373
106849_01967
106850_00082
23025.7_01059
ENDLINE
106849_01373
106849_01967
106850_00082
23025.7_01059
ENDLINE
Usando sed
:
sed -e 's/\s\{1,\}$//' -e 's/\s\+/\n/g' file.txt > split_file.txt
Acabei de adicionar uma solução Python para diversão:
python3 -c 'import sys; f=open(sys.argv[1]); print(*f.read().split(),sep="\n")' mytestfile
Este comando executa o script de uma linha do Python 3 em 'aspas simples' com o nome do arquivo que você deseja converter como argumento no final. A sintaxe é assim:
python3 -c 'PYTHON_COMMAND_OR_1-LINE-SCRIPT' ARGUMENTS
O script de 1 linha que usamos é este (expandido para várias linhas para maior clareza):
import sys
f=open(sys.argv[1])
print(*f.read().split(),sep="\n")
Ele importa o módulo sys
para ler os argumentos da linha de comando, usa o primeiro argumento fornecido como nome de arquivo para abrir e imprime cada fragmento de dados separados por espaço em branco do arquivo em uma única linha.
$ cat mytestfile
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
$ python3 -c 'import sys; f=open(sys.argv[1]); print(*f.read().split(),sep="\n")' mytestfile
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059