如何从终端按行排序

Lyn*_*nob 7 command-line scripts text-processing

我正在看这个问题 ,我想知道是否可以从终端完成以下操作。我是在 python 中完成的,只是想看看它是否可以从终端、bash 脚本或其他任何方式完成。

假设我有一个看起来像这样的文件:

2,4,5,14,9
40,3,5,10,1
Run Code Online (Sandbox Code Playgroud)

可以这样排序吗,按行(行)

2,4,5,9,14
1,3,5,10,40
Run Code Online (Sandbox Code Playgroud)

还是太复杂了?我是用 python 做的,我只是想知道下次我可能不使用 python 时是否可以这样做。我所做的是创建列表并对其进行排序。

jkt*_*123 7

这应该与您正在寻找的有关。它将读取一个文件 (test.txt) 并创建一个输出文件 (sorted.txt),其中的排序行与它们在原始文件中出现的顺序相同。

while read line; do j=$(echo "$line" | sed -e 's/,/\n/g' | sort -n); echo "$j" 
    | sed -e 's/ /,/g' >> sorted.txt; done < test.txt
Run Code Online (Sandbox Code Playgroud)


ter*_*don 5

这是另一种 Perl 方法:

perl -F, -lane 'print join ",",sort {$a<=>$b} @F' file.txt
Run Code Online (Sandbox Code Playgroud)

另一个 shell/coreutils 一个(尽管就我个人而言,我更喜欢 steeldriver使用相同想法的优秀答案):

while read line; do 
    tr , $'\n' < <(printf -- "%s" "$line") | sort -g | tr $'\n' , | sed 's/,$/\n/';
done < file.txt
Run Code Online (Sandbox Code Playgroud)