如何删除前导和尾随 " ,从 ksh 中每个字段的每一行中删除前导和尾随空格

How to remove leading and trailing " , remove leading and trailing spaces from each row each field in ksh

我在 ksh 脚本(经常使用 gawk)中有很多函数,它们对文件进行很多计算。文件是管道删除的。 但是现在我的源文件改变了。现在文件中的每个字段都包含在双引号内,如下所示。 此外,如果有的话,我必须 trim 前导和尾随空格或制表符。

Old_Myfile.txt

Name|Designation|emlid
Alex|Software Design Engg|E0023
Corner|SDE|E0056

New_Myfile.txt

"Name"|"Designation"|"emlid"
"Alex"|"Software Design Engg"|" E0023"
"      Corner  "|"      SDE"|" E0056 "

请提出与我已经编写的脚本兼容的方法。

sed

$ sed 's/ *" *//g' file

Name|Designation|emlid
Alex|Software Design Engg|E0023
Corner|SDE|E0056

也可以在 awk 脚本中合并,无需此额外步骤。

此脚本可能针对您的需要进行了过度设计,但它会单独对每个字段进行操作(在 for 循环内),以防您以后需要添加其他逻辑。

BEGIN{
  FS="|";
  OFS="|";
}

{
  for(i=1; i<=NF; i++){
    gsub(/(^"[ ]*|[ ]*"$)/, "", $i);

    if (i == NF) {
      printf("%s\n", $i);
    }
    else {
      printf("%s%s", $i, OFS);
    }
  }
}

这是输出

$ awk -f /tmp/script.awk </tmp/input.txt
Name|Designation|emlid
Alex|Software Design Engg|E0023
Corner|SDE|E0056

如果您引用的字段不能包含 |,那么在您现有的 awk 脚本中将其添加为第一行:

awk '
{ gsub(/[[:space:]]*"[[:space:]]*/,"") }
<existing script>
'