如何使用AWK去除分号分隔字段首尾的空白字符
正确awk实现方案
原写法错误原因
- 第一种写法
awk -F";" '{$1=$1}1':仅设置了输入分隔符为;,未指定输出分隔符OFS,默认OFS为空格,触发字段重排后会用空格替换原分隔符,同时没有对每个字段做去空格处理,因此不符合要求。 - 第二种写法
awk -F";" '{gsub(/^[ \t]+|[ \t]+$/,""); print;}':gsub未指定目标对象时默认处理整行内容,仅能去掉整行的首尾空白,无法处理每个字段前后的空白,因此达不到效果。
最终可用命令
awk -F';' -v OFS=';' '{for(i=1;i<=NF;i++) gsub(/^ +| +$/,"",$i)}1'
命令说明
-F';'指定输入字段分隔符为分号-v OFS=';'指定输出字段分隔符为分号,保证输出时保留原分隔符格式- 遍历所有字段,对每个字段单独执行gsub,仅匹配删除字段首尾的0x20半角空格,不会影响字段内部的空格(比如
27 mA中间的空格会保留) - 末尾的
1是awk简写,等价于print $0,输出处理后的整行
效果验证
输入1(无前导空格):27 mA; 25 mA ; 24 mA ; 22 mA;
输出:27 mA;25 mA;24 mA;22 mA;
输入2(有前导空格): 27 mA; 25 mA ; 24 mA ; 22 mA;
输出:27 mA;25 mA;24 mA;22 mA;
完全匹配期望结果。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

