Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103682211
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-18 22:55:46

 

awk的使用

1awk的语法:

awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...] 

2awk使用举例

1:显示文本文件testfile中第七行到第十五行中以字符“|”分隔的第一字段,第三字段和第七字段: 
awk  -F  “|”  'NR==7,NR==15 {printf  $1 $3 $7}'

 

2:显示文本文件test匹配(含有)字符串"2222"的所有行。 
$awk  '/2222/{print} '  test

 

3:作为一个较为实际的例子,我们假设要对UNIX中的用户进行安全性检查,方法是考察/etc下的passwd文件,检查其中的passwd字段(第二字段)是否为"*",如不为"*",则表示该用户没有设置密码,显示出这些用户名(第一字段)。我们可以用如下语句实现: 

#awk  -F :  '$2=="" {printf("%s no password!\n",$1'  /etc/passwd  

 

十四、shell编程常用命令补充

1cut命令

Cut命令将输入行的部分内容拷贝到输出。例如:

Cut -f 2 -d “|” test    输出文件test的第二个字段,以“|”分隔

Cut -c 2-5  test    输出文件test的每行第25个字符

2、反引号” `”操作符。将命令的标准输出赋值给变量。如:

sum=`bc<

$b+145.66

END`

3、cat命令

合并文件:

显示文件内容。应用举例:

合并文件:

Cat test1 test2 >test3

 

统计一组文件的行数、字数、字符数、字节数

Cat test*|wc –lwm

(统计一变量的行数、字数、字符数、字节数

Echo $a|wc –lwm

4、paste命令

粘贴文件。例如

Paste test1 test2> test3

5、关于注释

十五、Shell程序举例

   一、自动备份日志

#!/usr/bin/ksh

#

#功能:备份日志

 

if [ -z "$1" ]

then

 echo " Usage: `basename $0` 日期(YYYYMMDD)"

 exit -1;

fi

 

LOGUSER=`who am i|awk '{print $1}'`

 

######## Modify by GDP 2004/07/06 ##########

#RUN_LOG=$HOME/applog/bat_bkup_log.log

#ERR_LOG=$HOME/applog/err_bkup_log.log

 

RUN_LOG=$HOME/tmp/bat_bkup_log.log

ERR_LOG=$HOME/tmp/err_bkup_log.log

TMP_FILE=$HOME/tmp/bkup_log.txt

 

#检测并创建备份目录

if [ ! -d $LOGBAKDIR ]

then

mkdir -p $LOGBAKDIR

        echo $LOGBAKDIR

fi

 

#生成备份目录清单

print "$LOGDIR" >$TMP_FILE

#print "$SYSLOGDIR" >>$TMP_FILE

print "$HOME/log" >>$TMP_FILE

 

#删除备份运行和差错日志

rm -f $RUN_LOG

rm -f $ERR_LOG

 

#循环处理备份目录

while read LOG_DIR_NAME

do

        echo $LOG_DIR_NAME

        echo `basename $LOG_DIR_NAME`|read log_name

 

        #若目录存在,则以后台方式备份该目录

        if [ -d $LOG_DIR_NAME ]

        then

                echo "tar 目录$LOG_DIR_NAME" >>$RUN_LOG

cd $LOG_DIR_NAME

       

        if [ "x$LOG_DIR_NAME" = "x$LOGDIR" ]

        then

            mv run.log0203 run.log0203_bak

            mv run.log0204 run.log0204_bak

        fi

 

                tar cvf $LOGBAKDIR/$log_name$1.tar * 1>>$RUN_LOG 2>>$ERR_LOG

                if [ $? -ne 0 ]

                then

                        echo "tar 目录$LOG_DIR_NAME......FAIL!" >>$ERR_LOG

                        exit -1

                fi

                cd -

                cd $LOGBAKDIR

                compress -f $LOGBAKDIR/$log_name$1.tar 1>>$RUN_LOG 2>>$ERR_LOG &

                if [ $? -ne 0 ]

                then

                        echo "compress $log_name$1.tar......FAIL!" >>$ERR_LOG

                        exit -1

                fi

                cd -

        fi

 

done < $TMP_FILE

wait

if [ -s $ERR_LOG ]

then

        echo "备份有错, 请查看差错日志$ERR_LOG\n"

        exit -1

else

        echo "执行完毕,执行情况可查看日志$RUN_LOG\n"

fi

rm -f TMP_FILE

 

二、文件格式转换

功能:实现由申请卡文件向领卡文件的转换。

1、  请卡(文件名:FS_×××××××_××××,7位为局号,4位为企业代码)

 

  帐号    拼音户名   汉字户名    身份证种类     身份证号码      校验位     RC

19

1038

3960

6162

6380

81

 

  9(J)   29(L)      22(L)      2(J)         18(R)         1(J)

 

2、  领卡 (文件名:FL_×××××××_××××,7位为局号,4位为企业代码)

 

   帐号     证件种类    证件号码       校验位       RC

19

1011

1229

30

 

  9(J)      2(J)       18(R)        1(J)

 

程序内容如下:

 

FILEPATH=/usr/centerwd/data/sysin

FILE_NAME=$FILEPATH/FS_[0-9][0-9][0-9][0-9][0-9][0-9][0-9]_ [0-9][0-9][0-9][0-9]

 

MAIN(){

 

Ls $FILE_NAME>/dev/null 2>&1

If [ $? !=0 ]

Then

ERR_MSG 1

Exit 1

Fi

Echo “正在生成领卡文件,请稍候. . .\n”

Sleep 3

For FILE in `ls $FILE_NAME`

Do

FILE1=`basename $FILE`

JUHAO=`echo $FILE1|cut –d_ -f2`

QIYE=`echo $FILE1|cut –d_ -f3`

FILE_NAME1=$FILEPATH/FL_${JUHAO}_${QIYE}

Rm –f $FILE_NAME1

Echo  $FILE_NAME1

If [ -s $FILE ]

Then

Awk ‘{zh=substr($0,1,9)

Zjzl=substr($0,61,2)

Zjhm=substr($0,63,18)

Printf(“%s%s%-s0\n”,zh,zjzl,zjhm)>>FILE2

}’  FILE2=”$FILE_NAME1” $FILE

          fi

          chown centerwd:group $FILE_NAME1

          done

          echo “\n生成领卡文件结束\c”

          ERR_MSG 2

          }

         ERR_MSG(){

         Case “$1” in

1)     echo “没有要处理的文件!”;;

2)     echo “按回车键返回\c”

        read pause;;

esac

}

MAIN

Exit

 

三、用Shell程序生成一个简单的菜单。

程序示例如下:

while true

do

clear

echo

echo

echo “          储蓄网点管理终端“

echo

echo “        1、代收付数据处理“

echo “        2、带发工资转储蓄处理“

echo “        3、加办代收付号码“

echo “        4、代扣月租费处理“

echo

echo “        00、退出“

echo

echo “           请选择:\c”

read choo

case $choo in

1)     处理1;;

2)     处理2;;

3)     处理3;;

4)     处理4;;

        00) exit;;

         *) echo “输入数据错误!“

echo “按回车键返回\c”

read g

;;

          esac

         done

 

阅读(292) | 评论(0) | 转发(0) |
0

上一篇:SHELL编程基础(4)

下一篇:限制IP登录的shell

给主人留下些什么吧!~~