使用gsub删除空格的awk shell脚本

时间:2013-11-28 07:19:46

标签: shell awk gsub

我有一个shell脚本,我想导出'data'变量而不包含任何空格。我尝试过gsub(),但似乎无法让它工作。

export data="`grep -e 'P/N  :' "$xfile" | awk '{print substr($3,3)}' `"
if [ "$data" = "" ] && [ "$skipdata" = "0" ]
then
  export data="`grep -e 'P/N:' "$xfile" | awk '{print substr($2,3)}' |
    awk '{ if (index($1,"-D") != 0)
            $1 = (substr($1, 1, (index($1,"-D") -1))) "-DIE" }
            { print $1 }' `"

  if [ "$data" = "" ]
  then
    export data="`grep -e 'CUST PART NO:' "$xfile" | awk '{print substr($4,3)}' |
    awk '{ if (index($1,"-D") != 0)
            $1 = (substr($1, 1, (index($1,"-D") -1))) "-DIE" }
            { print $1 }' `"
  fi
fi

最终我希望$ data可以空白。我可以这样做:

export data="awk '{gsub($data," ","");print}"

2 个答案:

答案 0 :(得分:3)

它看起来像你的脚本应该写成:

data=$(awk -F':' '
$1 ~ /^(P\/N[[:space:]]*|CUST PART NO)$/ {
    sub(/-D.*/,"-DIE",$2)
    gsub(/[[:space:]]+/,"",$2)
    print $2
}
' "$xfile")

我们可以将它作为一个起点,如果它没有完全符合您的要求,那么请更新您的问题,以包含来自$ xfile的一些示例行和您想要的输出。

答案 1 :(得分:0)

我认为正确的语法是

gsub(/[[:blank:]]+/,"")

所以你可以使用

data=$(awk '{gsub(/[[:blank:]]+/,""); print}' <<< "$data")