awk 'FNR==1{f+=1;w++;}
f==1{if(length>w) w=length; next;}
f==2{printf("%-"w"s",$0); getline<f2; print;}
' f2=file2 file1 file1
Nota: file1
é intencionalmente lido duas vezes; a primeira vez é encontrar o comprimento máximo da linha, e a segunda vez é formatar cada linha para a concatenação final com as linhas correspondentes do arquivo2. - file2
é lido de forma programática; seu nome é fornecido pelo recurso variável-as-an-arg do awk.
Saída:
hi 1
wonderful 2
amazing 3
sorry 4
superman 5
superhumanwith 6
loss 7
Para manipular qualquer número de arquivos de entrada, os seguintes trabalhos: mas * Nota: ele não suporta a repetição do mesmo nome de arquivo. ou seja, cada nome do arquivo arg se refere a um arquivo diferente. Pode, no entanto, lidar com arquivos de diferentes comprimentos - além de um arquivo EOF, espaços são usados.
awk 'BEGIN{ for(i=1; i<ARGC; i++) {
while( (getline<ARGV[i])>0) {
nl[i]++; if(length>w[i]) w[i]=length; }
w[i]++; close(ARGV[i])
if(nl[i]>nr) nr=nl[i]; }
for(r=1; r<=nr; r++) {
for(f=1; f<ARGC; f++) {
if(r<=nl[f]) getline<ARGV[f]; else $0=""
printf("%-"w[f]"s",$0); }
print "" } }
' file1 file2 file3 file4
Aqui está a saída com 4 arquivos de entrada:
hi 1 cat A
wonderful 2 hat B
amazing 3 mat C
sorry 4 moose D
superman 5 E
superhumanwith 6 F
loss 7 G
H