如何使用linux shell sort对多字符分隔符进行排序?

时间:2017-04-19 03:30:31

标签: sorting

我有一个文件,其分隔符为" |||"。

abc|||123|||999|||5|||Just for you | Jim|||20
cef|||7|||210|||6|||Go away | R&B|||30
mmm|||89|||320|||16|||Traveling Light|George Winston|||21

分隔符" |||"无法替换为" |"或" ||",因为数据本身可能包含" |"或" ||"。

有人可以告诉我如何使用分隔符对第2列进行排序" |||" ?

以下方法失败:

sort -t$'|||' -nrk2 a.txt > b.txt
sort: multi-character tab `|||'

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将分隔符更改为|,并使用sort对其进行排序,然后将所有内容更改回来:

# change | to __BAR__ writing the result to b.txt
sed 's@\([^|]\)|\([^|]\)@\1__BAR__\2@g' a.txt > b.txt
# change ||| to | in b.txt
sed -i 's@|||@|@g' b.txt

# do sorting with | delimiter writing the result to c.txt
sort -t$'|' -nrk2 -k3,rn -k4,rn b.txt > c.txt 

# change everything back in c.txt:
# | to |||
sed -i 's@|@|||@g' c.txt
# __BAR__ to |
sed -i 's@__BAR__@|@g' c.txt