【问题标题】:Using scala variable in executing awk system command in scala在scala中执行awk系统命令时使用scala变量
【发布时间】:2013-10-31 06:14:49
【问题描述】:

我有一个命令 cat 文件名 | awk 'match($0,/regext_patt/,a) {print a[1] ;exit;}' 我想使用 scala sys.process 运行这个命令。这里的“文件名”和“regex_patt”将来自 scala 定义的变量。到目前为止我能够管理这个:

val extract = (s"cat $file" #| Process(Seq("awk", "match($0,/.+Country=([^;]*);.+/,a) {print a[1] ;exit(0);}"))).!!

这里的问题是正则表达式模式,它是硬编码的,我无法解决如何在 Seq 进程构建器中使用 scala 变量。

我试过了,但它给出了错误:

val reg:String = ".+Country=([^;]*);.+"
val extract= (s"cat $file" #| Process(Seq("awk", "match($0,/",reg,"/,a) {print a[1] ;exit(0);}"))).!

这里的错误是:

awk: match($0,/
awk:           ^ unexpected newline or end of string
awk: cmd. line:1: match($0,/
awk: cmd. line:1:           ^ unexpected newline or end of string

请帮助解决我在这里遗漏的关键问题。提前致谢

【问题讨论】:

  • 为什么不"match($0,/"+reg+"/,a) {print a[1] ;exit(0);}"
  • 哦!棘手而简单..我没想到..谢谢它的效果非常好!!
  • @red1ynx 请将其发布为答案,以便我们知道这个问题不会一直没有答案。

标签: regex scala process awk


【解决方案1】:

您可以使用简单的字符串连接: "match($0,/" + reg + "/,a) {print a[1] ;exit(0);}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    相关资源
    最近更新 更多