Я не сортирую здесь, но извлекаю не-0 цифр.
Вот AWK фильтр, который «обновляет» каждые поля с единственным (на самом деле, последним) не «0» содержания он видит:
# short version
awk '/./ { if (NF > maxNF) { maxNF=NF }
for(i=1;i<=NF;i++) { if ($i!="0") { result[i]=$i } }
}
END { for(i=1;i<=maxNF;i++) { printf "%s ",result[i] } }
'
# expanded version (ie, the same as above, with different indentation to mhelp reading)
awk '/./ { if (NF > maxNF)
{ maxNF=NF }
for(i=1;i<=NF;i++)
{ if ($i!="0")
{ result[i]=$i }
}
}
END { for(i=1;i<=maxNF;i++)
{ printf "%s ",result[i]
}
}
'
так, если я вставить отправил результат в этот фильтр :
echo "
1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 1 1 1 1 0
0 2 2 0 0 0 0 2 2 2 2 0 2 0 0 0 0 0 2 2 2 0 2 0 0 0 0 0 0 0 2
0 0 0 0 0 0 3 0 0 0 0 3 0 0 3 0 0 3 0 0 0 0 0 0 3 0 0 0 0 0 0
0 0 0 4 4 0 0 0 0 0 0 0 0 4 0 4 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0
" | awk '/./ { if (NF > maxNF) { maxNF=NF }
for(i=1;i<=NF;i++) { if ($i!="0") { result[i]=$i } }
}
END { for(i=1;i<=maxNF;i++) { printf "%s ",result[i] } }
'
выводит:
1 2 2 4 4 1 3 2 2 2 2 3 2 4 3 4 1 3 2 2 2 1 2 1 3 4 1 1 1 1 2
(примечание: с дополнительным "" в конце концов, здесь ...)
Замечание о предупреждении: очень OLD-версия оригинального awk (и, возможно, некоторого nawk) ограничена 99 полями ... (Редко встречается в настоящее время. И если вы используете версию GNU, вы будете в порядке)
Это действительно хороший ответ, но это также можно сделать с помощью sed или sort, потому что мы не научились использовать awk, поэтому мы не можем использовать это во время экзаменов , – fangio