【问题标题】:Awk shell scripting using gsub to remove whitespace使用 gsub 删除空格的 awk shell 脚本
【发布时间】:2013-11-28 07:19:45
【问题描述】:

我有一个 shell 脚本,我想导出没有任何空格的“数据”变量。我已经尝试过 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}"

【问题讨论】:

  • 当我不确定函数调用语法、参数等时,我会执行man (g)awk 并搜索该函数。你试过吗?你会在那里找到答案。
  • 您的脚本有很多问题,不值得将其用作起点并尝试纠正它。只需发布一些示例输入和预期输出,以便我们从一开始就向您展示如何编写它。

标签: shell awk gsub


【解决方案1】:

看起来你的脚本应该写成这样:

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

我们可以以此为起点,如果它不完全符合您的要求,则更新您的问题以包含 $xfile 中的一些示例行和您想要的输出。

【讨论】:

    【解决方案2】:

    我认为正确的语法是

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

    所以你可能会使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多