bash检查文件格式

情形描述:最近在做一个ETL的项目,用的是CLoverETL,需要在拿到文件后对文件格式进行检验,以决定是否继续。

主要功能是检查每个文件中有几个“|”符号,项目中约定以该符号来作为分隔,所以检查每个文件每行的“|”的个数。没有问题才可以插入到数据库中。

说明:

breakline=10表示如果一个文件中超过10行的格式不对,则不再计算
试了下,CloverETL这款工具中支持的通配符非常有限,所以类似Hengda_Payment_*_*_*_*这样看起来很怪的匹配方式
check_delimitor(){
    delimitor="|"
    breakline=10
    path="${DATATMP_DIR}/bash_res.txt"
    i=1
    while read line
    do
        num=$(echo $line|grep -o $delimitor|wc -l)
        if [ $num != $1 ];then 
            echo "$2|${i}|${NOW}" >> ${DATATMP_DIR}/bash_res.txt
            if [ $i -gt $breakline ]
            then
                echo "****More than ${i} lines format wrong in $2****" >> $path
                break 
            fi
        fi
        let i++
    done < ${DATATMP_DIR}/$2
}

for file in `ls ${DATATMP_DIR}`
do
    case $file in
    Hengda_Member_*)
    check_delimitor 27 $file
    ;;
    Hengda_Ticket_*)
    check_delimitor 7 $file
    ;;
    Hengda_Payment_*_*_*_*)
    check_delimitor 7 $file
    ;;
    Hengda_Payment_*)
    check_delimitor 9 $file
    ;;
    Hengda_Transaction_Non_Tickets_*)
    check_delimitor 7 $file
    ;;
    Hengda_Transaction_*)
    check_delimitor 14 $file
    ;;
    Hengda_Item_Non_Tickets_*)
    check_delimitor 6 $file
    ;;
    Hengda_Cinema_*)
    check_delimitor 8 $file
    ;;
    Hengda_Film_*_*)
    check_delimitor 6 $file
    ;;
    Hengda_Film_*)
    check_delimitor 10 $file
    ;;
    Hengda_Refer_*)
    check_delimitor 6 $file
    ;;
    *) echo "FILE NAME WRONG" ;;
    esac
done

 

转载于:https://www.cnblogs.com/ryansunyu/p/5195237.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux中,可以使用bash脚本或命令行来批量重命名文件。下面是一个示例的bash脚本: ```bash #!/bin/bash set -x if [ $# -lt 2 ]; then echo "Usage: rename oldfilename newfilename" exit 1 fi oldfilename=`dirname "$1"`/`basename "$1"` newfilename=`dirname "$2"`/`basename "$2"` if [ ! -f "$oldfilename" ]; then echo "Input filename please" exit 1 fi ls `dirname "$newfilename"` | grep "^`basename $newfilename`$" >/dev/null 2>&1 if [ $? == 0 ]; then echo "The file already exists. Do you want to continue?" while true; do read x if [ "$x" = Y -o "$x" = y ]; then mv -f "$oldfilename" "$newfilename" break else echo "Please input another new filename" read ofilename ls `dirname $ofilename` | grep "^`basename $ofilename`$" >/dev/null 2>&1 if [ $? == 0 ]; then echo "The file already exists. Do you want to continue?" read y if [ "$x" = 'Y' -o "$x" = 'y' ]; then mv -f "$oldfilename" "$ofilename" break else continue fi else mv "$oldfilename" "$ofilename" break fi fi done else mv "$oldfilename" "$newfilename" fi ``` 这个脚本使用了mv命令来重命名文件。在脚本中,首先判断输入的参数是否满足要求,然后获取旧文件名和新文件名。接下来,判断旧文件是否存在,如果不存在则提示输入文件名并退出。然后,检查新文件名是否已存在,如果存在则询问是否继续操作,根据用户的输入进行不同的处理。最后,使用mv命令进行文件重命名操作。 另外,如果你只需要对当前目录下的图像文件进行重命名,你可以使用下面这个bash脚本: ```bash #!/bin/bash set -x count=1 for img in *.jpg *.png; do new="image-$count.${img##*.}" mv "$img" "$new" 2>/dev/null if [ $? -eq 0 ]; then count=$((count + 1)) fi done ``` 这个脚本使用一个循环来遍历当前目录下的所有jpg和png图像文件。然后,使用`${img##*.}`来获取文件的扩展名,并使用`$count`来生成新的文件名。最后,使用mv命令进行文件重命名操作,并将错误输出重定向到/dev/null。如果重命名成功,则增加$count的值,以便为下一个文件生成新的文件名。 希望以上信息对你有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值