【问题标题】:awk: String Concat adds "0"awk:字符串 Concat 添加“0”
【发布时间】:2013-04-19 06:48:50
【问题描述】:

我尝试在 awk 脚本中连接两个字符串,但我得到的结果在最后一个位置有一个“0”。

    (input...) | awk '$1 ~ "match" { 
            (...)
            STRING1 = $2 ;
            STRING2 = $3 ;

            RESULT = STRING1 "" STRING2 ;   

            print RESULT ;   

    }' | (output....)   

如果例如$2 = "Foo"$3 = "Bla",结果将是“FooBla0”。

如何连接这两个结果为“FooBla”的字符串?

【问题讨论】:

  • 一定缺少某些东西,因为像 echo "hi" "he" "hi" | awk '$1 ~ "hi" {a=$2;b=$3; ab=a " " b; print ab }' 这样的并行示例正在运行。

标签: string awk string-concatenation concat


【解决方案1】:

如果您的代码不完整,您的输入与您的预期不符,或者您在简化问题时遗漏了一条重要信息,则给出的代码不会在行中附加0

$ cat file
match foo bla

$ awk '$1 ~ "match" { 
             STRING1 = $2 ;
             STRING2 = $3 ;

             RESULT = STRING1 "" STRING2 ;

             print RESULT ;   

     }' file
foobla

注意:对于简单的字段连接,这是很多不必要的代码:

$ awk '$1=="match"{print $2$3}' file
foobla

还要注意$1=="match"$1~"match" 之间的区别,第一个是全字段字符串匹配,第二个是正则表达式匹配。如果你真的想要第二个,我建议使用$1~/match/


我怀疑你错过了重要的信息,print fflush() 打印函数的退出状态。您想要print RESULT;fflush() 或更好,但只需将函数调用放在脚本的下一行即可。

【讨论】:

  • 感谢您的帮助。是的,我尝试了几次,在某些程序中它有效——而在某些程序中则无效。 ;) 但现在我发现了我的错误:“print RESULT”有效——但我有“print RESULT fflush()”,“0”在那里是因为“fflush()”......我知道这个小例子我的 awk-Statement 包含很多不必要的代码,但整个语句有 20 多行,所以我需要这个 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 2021-01-04
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多