如下图:在while中用awk去重复,awk只能循环执行一次,第二次进入循环后就不执行

解决方案 »

  1.   

    你的$dblog是什么样不清楚,一些变量因为没有看到定义(例如:nzdatFile),所以不能说出所有问题。
    但是,如果你要使用shell变量,awk后就不要用单引号,否则从语法上就错了。
    awk用了双引号以后,awk自己的域引用($0、$1...)就要转义(\$0、\$1...)。
    该加引号的最好别省事儿,万一有个空格啥的就哭瞎啦。
    另外,read本身可以按$IFS分割一行字符串赋值给多个变量,所以可以省略几句。
    cat $dblog | while read sysName tableName reptNum delimeter; do
        dataFile="$nzdatFile/$1/$sysName"
        noReptDat="$nzNoRepeat/$sysName"
        [[ -d "$noReptDat" ]] || {
            mkdir -p "$noReptDat"
            chmod 777 "$noReptDat"
        }
        reptDat="$nzRepeat/$sysName"
        [[ -d "$reptDat" ]] || {
            mkdir -p "$reptDat"
            chmod 777 "$reptDat"
        }
        awk -F"$delimeter" "a[$reptNum]++" "$dataFile/$tableName.dat" > "${tableName}_rept.dat"
        echo "awk -F\"\$delimeter\" \"a[\$reptNum]++\" \$dataFile/\$tableName.dat >\$reptDat/\${tableName}_rept.dat"
        awk -F"$delimeter" "!a[$reptNum]++" "$dataFile/$tableName.dat" >"$noRepetDat/${tableName}.dat"
    done
    以后这种帖子最好用字符串,别贴图。信息也尽量全。
      

  2.   

    刚才的脚本有个错误:
    awk -F"$delimeter" "!a[$reptNum]++" "$dataFile/$tableName.dat" >"$noRepetDat/${tableName}.dat"
    感叹号和后边的a要空格,不然shell就要另作解析,改为
    awk -F"$delimeter" "! a[$reptNum]++" "$dataFile/$tableName.dat" >"$noRepetDat/${tableName}.dat"