在scala中执行awk系统命令时使用scala变量

时间:2013-10-31 06:14:50

标签: regex scala process awk

我有一个命令cat filename | awk'match($ 0,/ regext_patt /,a){print a [1]; exit;}' 我想使用scala sys.process运行此命令。这里“filename”和“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

请帮助我在这里找不到什么关键的东西来解决这个问题。提前谢谢

1 个答案:

答案 0 :(得分:1)

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