1

専門家の助けが必要です:

File1:
;1002 Desc1002
;1001 Desc1001
207 Desc207
205 Desc205
;6 Desc6
2010 Desc2010
;2011 Desc2011

出力は数値順にソートする必要があります:

;6 Desc6
205 Desc205
207 Desc207
;1001 Desc1001
;1002 Desc1002
2010 Desc2010
;2011 Desc2011

(文字の並べ替えが簡単な場合は、次の出力が生成されます。まあ、それで十分です)

;1001 Desc1001
;1002 Desc1002
2010 Desc2010
;2011 Desc2011
205 Desc205
207 Desc207
;6 Desc6

出力に先行ゼロを挿入することは可能ですか? したがって、出力は次のようになります。

;000006 Desc6
000205 Desc205
000207 Desc207
;001001 Desc1001
;001002 Desc1002
002010 Desc2010
;002011 Desc2011

4

3 に答える 3

2

これはあなたのために働くかもしれません:

sed 's/^;\?\([0-9]*\)/\1\t&/' file | sort -n | sed 's/.*\t//'
;6 Desc6
205 Desc205
207 Desc207
;1001 Desc1001
;1002 Desc1002
2010 Desc2010
;2011 Desc2011
于 2012-04-04T22:51:23.530 に答える
2
awk -F";" '{print $1 $2 "|" $0}' fileName | sort -n | cut -d"|" -f2
于 2012-04-04T22:52:15.143 に答える
0

次のように、先行ゼロを挿入して;インプレイを維持できます。

awk '$1 ~ /^;/ ? sub(/^;/, "", $1) && $1 = ";"sprintf( "%06d", $1 ) : $1 = sprintf( "%06d", $1 )' file.txt

したがって、目的の出力を得るために (および 2 つの連続した呼び出しを気にしない場合awk)、amit_g の回答とすばやく結合できます。

awk '$1 ~ /^;/ ? sub(/^;/, "", $1) && $1 = ";"sprintf( "%06d", $1 ) : $1 = sprintf( "%06d", $1 )' file.txt | awk -F";" '{print $1 $2 "|" $0}' | sort -n | cut -d "|" -f 2

出力:

;000006 Desc6
000205 Desc205
000207 Desc207
;001001 Desc1001
;001002 Desc1002
002010 Desc2010
;002011 Desc2011

HTH

于 2012-04-05T03:44:51.540 に答える