我需要使用 awk
从如下输入中删除前导和尾随空白字符:
27 mA; 25 mA ; 24 mA ; 22 mA;
所需输出:
27 mA;25 mA;24 mA;22 mA;
我尝试过的:
awk -F";" '{$1=$1}1'
:不删除空格,但删除 ;
sawk -F";" '{gsub(/^[ \t]+|[ \t]+$/,""); print;}'
:不删除空格如何修改上面的这些命令以删除所有前导和尾随空格 (0x20) 字符?
输入可能在第一个字段包含前导空格:
27 mA; 25 mA ; 24 mA ; 22 mA;
答案 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