shell用法点滴
时间:2006-10-21 来源:yuanye1014
/******************************************************
**Shell 用法点滴
**Wang Zonghui
*******************************************************/ 1、截取日期、字符串固定长度。
例如,下列文件中第17列为日期,打印出按YYYYMMDD形式来查看该列值,并做排重处理。 [/wangzh/test] ls -l
total 117552
-rw-r--r-- 1 dsadm dbadm 41703424 Aug 24 22:56 M05001200508011N0005.AVL
-rw-r--r-- 1 dsadm dbadm 0 Aug 24 23:01 M05002200508012N0005.AVL
-rw-r--r-- 1 dsadm dbadm 17886723 Aug 24 23:01 M05018200508012N0005.AVL
-rw-r--r-- 1 dsadm dbadm 416672 Aug 24 23:50 M05019200508252N0002.AVL
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{print $17}'|sort -u |more
2005081320320
2005081320332
2005081320334
2005081320342
2005081320354
2005081320370
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{print substr($17,1,8)}'|sort -u |more
20050813
20050814
20050815
20050816
[/wangzh/test]
/***统计2005-08-15日传输的文件条数**/
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{if(substr($17,1,8)=="20050815") total+=1} END {print "%ld\n,total}'
%ld
430
[/wangzh/test] 2、查看文件列数
例如,下面文件共45列(分隔符为'TAB'键) [/wangzh/test] ls -l M05019200508252N0002.AVL
-rw-r--r-- 1 dsadm dbadm 416672 Aug 24 23:50 M05019200508252N0002.AVL
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{print NF}'|sort -u
45
[/wangzh/test] 如文件规定为45列,若其中有46列的几行记录,则可以把这些记录打印出来
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{if(NF>45) print $0}' [/wangzh/test] 3、统计文件中某列符合某一值的总数或某列的和。
例如,文件中第23列为"Kjava信息费",现统计该次传输的文件中信息费的总和 [/wangzh/test] ls -l M05019200508252N0002.AVL
-rw-r--r-- 1 dsadm dbadm 416672 Aug 24 23:50 M05019200508252N0002.AVL
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{print $23}'|more
00000080
00000000
00000030
00000050
00000080
00000030
00000150
00000080
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{total+=$23} END {printf "infofee is: %ld\n",total}'
infofee is: 92570
[/wangzh/test]
**Shell 用法点滴
**Wang Zonghui
*******************************************************/ 1、截取日期、字符串固定长度。
例如,下列文件中第17列为日期,打印出按YYYYMMDD形式来查看该列值,并做排重处理。 [/wangzh/test] ls -l
total 117552
-rw-r--r-- 1 dsadm dbadm 41703424 Aug 24 22:56 M05001200508011N0005.AVL
-rw-r--r-- 1 dsadm dbadm 0 Aug 24 23:01 M05002200508012N0005.AVL
-rw-r--r-- 1 dsadm dbadm 17886723 Aug 24 23:01 M05018200508012N0005.AVL
-rw-r--r-- 1 dsadm dbadm 416672 Aug 24 23:50 M05019200508252N0002.AVL
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{print $17}'|sort -u |more
2005081320320
2005081320332
2005081320334
2005081320342
2005081320354
2005081320370
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{print substr($17,1,8)}'|sort -u |more
20050813
20050814
20050815
20050816
[/wangzh/test]
/***统计2005-08-15日传输的文件条数**/
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{if(substr($17,1,8)=="20050815") total+=1} END {print "%ld\n,total}'
%ld
430
[/wangzh/test] 2、查看文件列数
例如,下面文件共45列(分隔符为'TAB'键) [/wangzh/test] ls -l M05019200508252N0002.AVL
-rw-r--r-- 1 dsadm dbadm 416672 Aug 24 23:50 M05019200508252N0002.AVL
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{print NF}'|sort -u
45
[/wangzh/test] 如文件规定为45列,若其中有46列的几行记录,则可以把这些记录打印出来
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{if(NF>45) print $0}' [/wangzh/test] 3、统计文件中某列符合某一值的总数或某列的和。
例如,文件中第23列为"Kjava信息费",现统计该次传输的文件中信息费的总和 [/wangzh/test] ls -l M05019200508252N0002.AVL
-rw-r--r-- 1 dsadm dbadm 416672 Aug 24 23:50 M05019200508252N0002.AVL
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{print $23}'|more
00000080
00000000
00000030
00000050
00000080
00000030
00000150
00000080
[/wangzh/test] cat M05019200508252N0002.AVL|awk -F' ' '{total+=$23} END {printf "infofee is: %ld\n",total}'
infofee is: 92570
[/wangzh/test]
相关阅读 更多 +