Decentemente possível com awk
:
$ awk 'NR==FNR{split($0,a);}NR!=FNR{for(i=1;i<=NF;i++) print a[i],$i}' foo.txt bar.txt
foo1 bar1
foo2 bar2
foo3 bar3
foo4 bar4
foo5 bar5
foo6 bar6
foo7 bar7
foo8 bar8
foo9 bar9
foo10 bar10
Eu fiz dois arquivos, foo.txt e bar.txt
foo.txt parece assim: foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 foo10
e bar.txt: bar1 bar2 bar3 bar4 bar5 bar6 bar7 bar8 bar9 bar10
Como você obtém esses dois arquivos de texto e os envia para um arquivo de texto chamado foobar.txt, ordenando-os como
foo1 bar1
foo2 bar2
foo3 bar3
...
Coisas do administrador: estou recebendo avisos sobre essa pergunta ser duplicada porque as pessoas sugeriram combinar
foo1
foo2
foo3
foo4
foo5
e
bar1
bar2
bar3
bar4
bar5
É o mesmo processo. Se você tiver que fazer isso, em vez disso, você pode encontrar o texto de endereçamento de pergunta na nova combinação de linhas aqui: Link para a pergunta de user2120893
Para endereçar arquivos de edição, com um comando, de itens espaçados, você precisa usar a resposta que eu marquei abaixo usando o awk. Continuei vendo questões de 'como combinar duas listas' e 'como separar listas espaçadas em novas listas de linhas' mas nunca um comando de uma linha, usando o awk, para separar duas listas espaçadas por funções do awk e combiná-las por meio do awk . Um grande obrigado a Sergiy Kolodyazhnyy por finalmente responder minha pergunta (e usar apenas um comando para fazer isso!). Eu tenho procurado uma resposta para isso por um tempo e um assistente de awk interveio para nos mostrar as cordas. Agradecemos a John1024 por outra ótima resposta.
Vamos começar com esses dois arquivos:
$ cat foo.txt
foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 foo10
$ cat bar.txt
bar1 bar2 bar3 bar4 bar5 bar6 bar7 bar8 bar9 bar10
Para combiná-los juntos:
$ paste <(tr ' ' '\n' <foo.txt) <(tr ' ' '\n' <bar.txt)
foo1 bar1
foo2 bar2
foo3 bar3
foo4 bar4
foo5 bar5
foo6 bar6
foo7 bar7
foo8 bar8
foo9 bar9
foo10 bar10
Ou:
$ awk -v RS='[[:space:]]+' 'FNR==NR{a[NR]=$0; next} {print a[FNR],$0}' foo.txt bar.txt
foo1 bar1
foo2 bar2
foo3 bar3
foo4 bar4
foo5 bar5
foo6 bar6
foo7 bar7
foo8 bar8
foo9 bar9
foo10 bar10
Aproveitando a resposta de Hillsie para essa pergunta semelhante , se você estiver usando o bash, você pode fazer
paste <(tr ' ' '\n' < foo.txt) <(tr ' ' '\n' < bar.txt)
usando a substituição de processos ( <(…)
) para traduzir os espaços em seus arquivos
para novas linhas.
Como uma alternativa às abordagens de transposição e combinação já postadas, aqui está uma abordagem de combinar e transpor:
$ cat foo.txt bar.txt | rs -T
foo1 bar1
foo2 bar2
foo3 bar3
foo4 bar4
foo5 bar5
foo6 bar6
foo7 bar7
foo8 bar8
foo9 bar9
foo10 bar10