Bash - Awk排序 - 不排序

Tre*_*opz 2 linux bash

awk '{for(i=1; i<=NF; i++) printf("%d ",$i)}' | sort -n
Run Code Online (Sandbox Code Playgroud)

它读取的文件就像

55 89 33 20
Run Code Online (Sandbox Code Playgroud)

并正常打印出来,而不是按数字排序.为什么?

Jos*_*lly 6

sort在每行的基础上工作,printf默认情况下不附加换行符,您需要指定它.所以使用:

awk '{for(i=1; i<=NF; i++) printf("%d\n",$i)}' | sort -n
Run Code Online (Sandbox Code Playgroud)

这将在单独的行中打印出您的数字,如果您希望它们再次在一行中,那么您可以将它管道输出到paste:

awk '{for(i=1; i<=NF; i++) printf("%d\n",$i)}' | sort -n | paste -s -d ' '
Run Code Online (Sandbox Code Playgroud)

您也可以使用print而不是printf,默认情况下会附加换行符:

awk '{for(i=1; i<=NF; i++) print $i}' | sort -n
Run Code Online (Sandbox Code Playgroud)