awk的使用
1、awk的语法:
awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]
2、awk使用举例
例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编程常用命令补充
1、cut命令
Cut命令将输入行的部分内容拷贝到输出。例如:
Cut -f 2 -d “|” test 输出文件test的第二个字段,以“|”分隔
Cut -c 2-5 test 输出文件test的每行第2至5个字符
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