如何在bash中对文本文件的行进行排序?

时间:2016-04-25 14:49:45

标签: linux bash sorting

我有一个条形分隔的文本文件,如下所示:

stringC|rest-of-lineC3
stringC|rest-of-lineC1
stringC|rest-of-lineC2
stringA|rest-of-lineA2
stringA|rest-of-lineA1
stringB|rest-of-lineB4
stringB|rest-of-lineB1
stringB|rest-of-lineB3
stringB|rest-of-lineB2

我需要在|之前用字符串对其进行排序 - 而不是对条形后面的内容进行二次排序。所以下面的例子应该分为:

stringA|rest-of-lineA2
stringA|rest-of-lineA1
stringB|rest-of-lineB4
stringB|rest-of-lineB1
stringB|rest-of-lineB3
stringB|rest-of-lineB2
stringC|rest-of-lineC3
stringC|rest-of-lineC1
stringC|rest-of-lineC2

但不是:

stringA|rest-of-lineA1
stringA|rest-of-lineA2
stringB|rest-of-lineB1
...

有没有办法在使用sort或任何其他命令的bash脚本中执行此操作?

如果原始文件不在块中,我怎样才能获得与上面相同的结果,即它看起来像这样:

stringC|rest-of-lineC3
stringA|rest-of-lineA2
stringC|rest-of-lineC1
stringA|rest-of-lineA1
stringB|rest-of-lineB4
stringB|rest-of-lineB1
stringC|rest-of-lineC2
stringB|rest-of-lineB3
stringB|rest-of-lineB2

1 个答案:

答案 0 :(得分:3)

使用-s选项进行排序以获得稳定的

sort -st'|' -k1,1 file

初始块无关紧要,应该适用于两者。