使用 sort
和 awk
假设您的日期格式如下:
08/03/2015
–> 日,月,年
使用以下命令。
- 这是一个命令(注意行尾的
\
)
- 将
your_input_file
替换为您的文件名。
该命令
awk '{for (i=1;i<=NF;i++) {if (i==3) {printf "%s/%s/%s\t",substr($3,7,4),substr($3,4,2),substr($3,1,2)} else {printf "%s\t",$i}} printf "\n"}' your_input_file |\
sort -k3 -k4 |\
awk '{for (i=1;i<=NF;i++) {if (i==3) {printf "%s/%s/%s\t",substr($3,9,2),substr($3,6,2),substr($3,1,4)} else {printf "%s\t",$i}} printf "\n"}'
故障
如果您的日期格式不是“日/月/年”,您需要更改以下部分:
substr($3,7,4),substr($3,4,2),substr($3,1,2)
和
substr($3,9,2),substr($3,6,2),substr($3,1,4)
说明:
substr(字段,起始位置,长度)
字段
请勿更改,它是第三列
起始位置
,长度
从起始位置
开始返回一个长度为长度
的子字符串
示例
输入文件foo
cat foo
090100010000481074 1 08/03/2015 09:35:17.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 07/03/2015 09:35:15.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 07/03/2015 09:35:17.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 08/03/2015 09:35:15.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 08/03/2016 09:35:17.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 03/07/2016 09:35:15.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 07/03/2016 09:35:17.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 08/03/2015 09:35:15.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
输出结果为:
awk '{for (i=1;i<=NF;i++) {if (i==3) {printf "%s/%s/%s\t",substr($3,7,4),substr($3,4,2),substr($3,1,2)} else {printf "%s\t",$i}} printf "\n"}' foo | sort -k3 -k4 | awk '{for (i=1;i<=NF;i++) {if (i==3) {printf "%s/%s/%s\t",substr($3,9,2),substr($3,6,2),substr($3,1,4)} else {printf "%s\t",$i}} printf "\n"}'
090100010000481074 1 07/03/2015 09:35:15.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 07/03/2015 09:35:17.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 08/03/2015 09:35:15.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 08/03/2015 09:35:15.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 08/03/2015 09:35:17.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 07/03/2016 09:35:17.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 08/03/2016 09:35:17.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q 2
090100010000481074 1 03/07/2016 09:35:15.934 LA150803000AJSX00000 LA150803000AJSX CRBP Buy ELF 100 1980000 119 3 2 1890000 119 100 2040000 119 100 1980000 119 1000 #Q