【问题标题】:removing a space from a string by awk通过 awk 从字符串中删除一个空格
【发布时间】:2015-12-14 08:23:42
【问题描述】:

如何使用 awk 从字符串中删除名称和姓氏之间的空格? 大多数示例都是关于将数据从命令行重定向到 awk,但我需要在 awk 脚本中操作字符串。

转换这个:

"steve john"

到:

"stevejohn"

我有一个字符串变量,我要求用户在 awk 脚本中输入它。我需要删除空格。

【问题讨论】:

  • awk '{print $1 $2}' filenameecho "hi gh"| awk '{print $1 $2}'
  • 如果您有关于构建 shell 脚本的答案,请编辑您的问题以包含您尝试过的内容。

标签: awk


【解决方案1】:

gsub 是你的朋友。以下命令基本上对正则表达式(在这种情况下为单个空格)进行全局替换,将其替换为目标 $0(整行)上的空字符串。

pax> echo "steve john" | awk '{ gsub (" ", "", $0); print}'
stevejohn

您可以使用任何目标,包括用户的一个输入:

pax> awk 'BEGIN {getline xyzzy ; gsub(" ","", xyzzy) ; print xyzzy}'
hello there my name is pax
hellotheremynameispax

【讨论】:

    【解决方案2】:

    使用sed:

    $ echo "steve john" | sed 's/ //g'
    stevejohn
    

    如果您必须使用awk,请执行以下操作:

    $ echo "steve john" | gawk '{print $1 $2}'
    stevejohn
    

    编辑:

    在 bash 脚本中,您可以这样做:

    s="steve john" # user input
    t=$(echo $s | gawk '{print $1 $2}')
    echo $t
    

    【讨论】:

    • 我有一个字符串变量,我要求用户在 awk 脚本中输入。我需要删除空格
    • 记得引用你的变量( "$s" 而不是 $s ),你不会真的在 bash 中调用外部命令来做到这一点,你会使用 shell 内置:s="steve约翰”; echo "${s// }" 史蒂夫约翰
    【解决方案3】:
    echo "john smith aaa " |\
    awk 'BEGIN {FS=" "; OFS=""} {for(i=1;i<=NF;++i) {out = out OFS $i}} END {print out;}'
    

    【讨论】:

    • 或者你可以使用“sed”命令。 sed 通常用于从输入中删除或替换字符串。
    • awk 通常会快一点,不过 :)
    猜你喜欢
    • 2013-04-14
    • 2011-09-21
    • 2017-11-20
    • 1970-01-01
    • 2012-03-25
    相关资源
    最近更新 更多