awk输出含多余空格问题求助:为何处理后字符间出现空格?
为什么awk处理后输出会有奇怪的空格?
哈哈,这个问题我之前也踩过坑!原因其实很直白:你把FS(字段分隔符)设成了空字符串,这会让awk把每个单个字符都识别成一个独立字段。而awk默认的OFS(输出字段分隔符)是空格,当你修改$1之后,awk输出$0时会自动用OFS把所有字段拼接起来,自然就出现了每个字符之间都插空格的情况。
解决方法有两种,都很简单:
方法1:同步设置OFS为空字符串
既然拆分字段用了空FS,那输出时也指定空OFS,这样拼接字段就不会加空格了:
echo "hello world" | awk 'BEGIN{FS=""; OFS=""} {$1=toupper($1); print}'
方法2:不拆分字段,直接处理整个字符串
其实没必要把每个字符拆成字段,直接操作整个字符串更高效:
# 用sub替换第一个字符 echo "hello world" | awk '{sub(/./, toupper(substr($0,1,1))); print}' # 或者直接拼接字符串,更直观 echo "hello world" | awk '{print toupper(substr($0,1,1)) substr($0,2)}'
两种方法的输出都是:
Hello world
内容的提问来源于stack exchange,提问作者tenjohn
相关产品推荐
相关产品推荐

