删除多个空格-Unix脚本

拉维

我试图从我的shell脚本中删除重复的空格,但似乎

tr -s " " < input.txt > output.txt 

不管用。还有什么其他方法可以从shell脚本中将多个连续的空格删除为单个空格。

我正在尝试从内容中删除空格

1     | First         | PO BOX 123        | DAYTON          | OH            | 3432-222
2     | Second        | PO BOX 2223       | CALIFORNIA      | CA            | 23423 
3     | THIRD         | PO BOX 21         | COLUMBUS        | OH            | 2223

进入这个

1|First|PO BOX 123|DAYTON|OH|3432-222
2|Second|PO BOX 2223|CALIFORNIA|CA|23423
3|THIRD|PO BOX 21|COLUMBUS|OH|2223
ghoti

我喜欢将awk用于具有记录的内容。tr TR anslates文字,sed是一个小号treamitor,但awk明白的记录,字段,字段分隔符等概念

因此,为了完成您的选择集,以下是最小化awk的解决方案:

$ awk -F ' *\\| *' '{$1=$1} 1' OFS='|' input.txt
1|First|PO BOX 123|DAYTON|OH|3432-222
2|Second|PO BOX 2223|CALIFORNIA|CA|23423
3|THIRD|PO BOX 21|COLUMBUS|OH|2223

这将输入字段分隔符设置为-F,将输出字段分隔符设置为OFS该脚本包含OFS一个语句(该语句使用重写记录)和一个语句(1快捷方式)以打印该行。

请注意该-F选项中竖线的奇怪转义如果要使用此功能,为避免混淆,您可能想要awk -F ' *[|] *' ...代替。

为了变得更短以牺牲清晰度为代价,您还可以使用:

$ awk -F ' *[|] *' '$1=$1' OFS='|' input.txt

这将记录重写语句变成始终返回true的条件,从而消除了对1快捷方式的需要虽然它可以减少脚本中的几个字符,但我仅出于乐趣而将其包括在内。最好使用不会在一两年内重读的代码。;)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章