Не могли бы вы попробовать следующее. Это выглядит более надежно, вот его преимущества:
- Он должен работать и без GNU
awk
(хотя я не смог протестировать все его версии). - Он будет искать максимальное количество строк во всех переданных файлах Input_file и будет печатать нули в соответствии с максимальным количеством полей в этой нулевой строке.
- Он также будет выглядеть, если строка (2-я строка в 1-м Input_file и 2-й строке)во втором Input_file), и если они имеют меньшее количество полей, он также добавит к строке оставшиеся числовые поля (просто добавьте).
awk '
FNR==1{
total_fields=total_fields>NF?total_fields:NF
++file
}
{
file_lines[file]++
a[FNR,file]=$0
}
END{
for(i in file_lines){
val=val>file_lines[i]?val:file_lines[i]
}
for(i=1;i<=val;i++){
for(j=1;j<=file;j++){
num=split(a[i,j],array," ")
if(num<total_fields){
new_val=sprintf("%0"total_fields-num"d","")
##printf "....... "total_fields-num">>>>"new_val" "
gsub(/0/,"0 ",new_val)
a[i,j]=(a[i,j]?a[i,j] OFS:"")new_val
new_val=""
}
if(!a[i,j]){
a[i,j]=sprintf("%0"total_fields"d",a[i,j])
gsub(/0/,"0 ",a[i,j])
}
printf("%s%s",a[i,j],j==file?ORS:OFS)
new_val=""
}
}
}
' file1 file2 file3 | column -t