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

时间:2016-09-20 13:52:37

标签: unix awk ksh gawk

我在ksh脚本中有很多函数(使用gawk很多),它对文件进行了很多计算。文件是管道删除。 但现在我的源文件发生了变化。现在文件中的每个字段都在双引号内,如下所示。 另外,我必须修剪前导和尾随空格或标签(如果有的话)。

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 "

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

3 个答案:

答案 0 :(得分:2)

sed

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

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

可以在awk脚本中组合而不需要额外的步骤。

答案 1 :(得分:0)

此脚本可能会根据您的需要进行过度设计,但它会在每个字段上单独运行(在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

答案 2 :(得分:0)

如果引用的字段不能包含| s,那么在现有的awk脚本中添加以下内容作为第一行:

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