我有一个文件,其分隔符为" |||"。
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 `|||'
谢谢!
答案 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