colar & sed
Existem maneiras mais eficientes, mas aqui está um método rápido e sujo usando paste
e sed
.
$ paste -d":" t1.txt t2.txt | sed 's/://g'
aab
bbc
ccd
O acima junta os dois arquivos assim:
a:ab
b:bc
c:cd
E o sed
remove o :
.
apenas cole
Você pode abrir mão usando o sed
, é um pouco redundante dizendo ao paste
para não usar nada como um delimitador ao juntar os arquivos:
$ paste -d "" t1.txt t2.txt
aab
bbc
ccd
awk
Você também pode usar awk
para fazer isso:
$ awk 'NR==FNR{a[FNR]=$0;next} {print a[FNR] $0}' t1.txt t2.txt
aab
bbc
ccd
Isso percorre o primeiro arquivo, t1.txt
, e armazena-o em uma matriz, a[FNR]
. O FNR
é o índice nesse array com base no número da linha em que cada linha estava, no arquivo t1.txt
. Posteriormente, percorre o segundo arquivo, t2.txt
, e imprime a linha correspondente da linha do primeiro arquivo junto com o segundo arquivo.
junte-se a & awk & nl
Esse método é um pouco confuso, mas funciona e torna o trabalho pesado menos complicado quando se usa awk
, em termos do que está acontecendo.
$ join <(nl t1.txt) <(nl t2.txt)|awk '{print $2 $3}'
aab
bbc
ccd
Os comandos nl ...
produzem versões dos arquivos de teste com números de linha:
$ nl t1.txt
1 a
2 b
3 c
O comando join
usa esses números de linha como a parte de dados que é comum a ambos os arquivos, para que possa se unir a ele.
$ join <(nl t1.txt) <(nl t2.txt)
1 a ab
2 b bc
3 c cd
O awk
é usado no final para extrair as colunas 2 e 3 de cima.
pr & awk
O pequeno comando pr
usado também pode ser usado para unir os arquivos usando sua opção de mesclagem -m
.
$ pr -t -m t1.txt t2.txt | awk '{print $1 $2}'
aab
bbc
ccd