AWK 从字段中删除前导和尾随空格

时间:2021-07-27 19:40:30

标签: awk

我需要使用 awk 从如下输入中删除前导和尾随空白字符:

27 mA; 25 mA   ; 24 mA ; 22 mA;

所需输出:

27 mA;25 mA;24 mA;22 mA;

我尝试过的:

  1. awk -F";" '{$1=$1}1':不删除空格,但删除 ;s
  2. awk -F";" '{gsub(/^[ \t]+|[ \t]+$/,""); print;}':不删除空格

如何修改上面的这些命令以删除所有前导和尾随空格 (0x20) 字符?

更新

输入可能在第一个字段包含前导空格:

  27 mA; 25 mA   ; 24 mA ; 22 mA;

2 个答案:

答案 0 :(得分:3)

对于您显示的示例,请尝试遵循 awk 代码。使用 GNU awk 编写和测试,应该适用于任何 awk

awk -F'[[:space:]]*;[[:space:]]*' -v OFS=";" '{sub(/^[[:space:]]+/,"");$1=$1} 1' Input_file

OR

awk -F'[[:blank:]]*;[[:blank:]]*' -v OFS=";" '{sub(/^[[:blank:]]+/,"");$1=$1} 1' Input_file

解释: 简单的解释是,将每行的字段分隔符设为空格(0 次或多次出现),然后是 ;,然后是0 次或多次出现空格。将 OFS 设置为 ;。在主程序中,重新分配第一个字段,然后简单地打印行。

第二个解决方案:根据@jhnc 在评论中的好建议,您可以尝试使用您显示的示例。

awk '{sub(/^[[:space:]]+/,"");gsub(/ *; */,";")} 1' Input_file

答案 1 :(得分:2)

一个简单的sed

sed -E 's/[[:blank:]]*;[[:blank:]]*/;/g; s/^[[:blank:]]+|[[:blank:]]+$//' file

27 mA;25 mA;24 mA;22 mA;

或者这个awk

awk '{gsub(/[[:blank:]]*;[[:blank:]]*/, ";"); gsub(/^[[:blank:]]+|[[:blank:]]+$/, "")} 1' file
相关问题