1

需要的专家帮助请:

文件 1 :
;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

因此,为了给您所需的输出,(如果您不介意连续两次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

高温高压

于 2012-04-05T03:44:51.540 回答