0

すべての行に特定の区切り文字があるファイルをソートしたい。並べ替えがその区切り記号から始まり、数字のみに従って並べ替えられるように、行を並べ替えたいと思います。

ファイルは次のようになります。

adf234sdf:nzzs13245ekeke  
zdkfjs:ndsd34352jejs  
mkd45fei:znnd11122iens

出力は次のようになります。

mkd45fei:znnd11122iens  
adf234sdf:nzzs13245ekeke  
zdkfjs:ndsd34352jejs
4

3 に答える 3

2

これは、このアイデアに基づいたアプローチになる可能性があります。

$ sed -r 's/([^:]*):([a-z]*)([0-9]*)(.*)/\1:\2-\3\4/g' a | sort -t- -k2,2 | tr -d '-'
mkdfei:aa11122iens
adf234sdf:tt13245ekeke  
zdkfjs:aa34352jejs  

ピースごと:

$ sed -r 's/([^:]*):([a-z]*)([0-9]*)(.*)/\1:\2-\3\4/g' a 
adf234sdf:tt-13245ekeke  
zdkfjs:aa-34352jejs  
mkdfei:aa-11122iens
$ sed -r 's/([^:]*):([a-z]*)([0-9]*)(.*)/\1:\2-\3\4/g' a | sort -t- -k2,2
mkdfei:aa-11122iens
adf234sdf:tt-13245ekeke  
zdkfjs:aa-34352jejs  
$ sed -r 's/([^:]*):([a-z]*)([0-9]*)(.*)/\1:\2-\3\4/g' a | sort -t- -k2,2 | tr -d '-'
mkdfei:aa11122iens
adf234sdf:tt13245ekeke  
zdkfjs:aa34352jejs  

そこで-、最初の数字の前に文字を追加します。次に、その文字に基づいてソートし、最後に削除-します ( tr -d '-')。

于 2013-10-16T10:35:27.717 に答える
2

オプションを使用し-tて区切り文字を設定します。

$ sort -t: -nk2,2 file
mkdfei:11122iens
adf234sdf:13245ekeke
zdkfjs:34352jejs
于 2013-10-16T10:18:09.743 に答える
1

gawk関数があり、次asortを使用できます。

gawk -f sort.awk data.txt 

data.txt入力ファイルはどこにsort.awkあり、

{ 
    line[NR]=$0;
    match($0,/:[^0-9]*([0-9]*)/,a)
    nn[NR]=a[1]" "NR
}

END {
   N=asort (nn);
   for (i=1; i<=N; i++) {
      split(nn[i],c," ")
      ind=c[2]
      print line[ind];
   }
}
于 2013-10-16T12:47:41.863 に答える