读取多个文件并使用scala提取第一列

时间:2016-08-23 20:30:12

标签: scala

我开始学习Scala并深入研究这个简单的问题。我习惯使用Unix命令行与Bash和Awk这样做,但我决定使用Scala进行学习。

我想解析多个文本文件,这些文件是制表符分隔的,想要提取1或任意列。

我还想删除以"#"开头的行。我能做到的。

下面的代码将打印每个文件中特定列的第一行。 如何让它打印所有行?

import scala.io.Source

if (args.length > 0){

    for (arg<-args){
        val file= Source.fromFile(arg).getLines.filter(s => !(s contains "#")).mkString("\n").split("\t")
        println(file(2))    
    }
}

else
Console.err.println("Please enter filename")

谢谢

2 个答案:

答案 0 :(得分:1)

在getLines上调用mkString(&#34; \ n&#34;)将导致整个文件的单个字符串,这就是您仅看到第一行输出的原因。

以下代码段应该正常工作:

  if (args.length > 0) {
    for (arg <- args) {
      println(Source.fromFile(arg).getLines().filterNot(_.trim.startsWith("#")).map(_.split("\t")(2)).mkString("\n"))
    }
  }

答案 1 :(得分:1)

这是一个用于理解的解决方案。以下代码将返回第二列。只需将硬编码值1更改为您想要的任何列。

 {for {
      line <- Source.fromFile("test.txt").getLines
      if(!(line contains "#"))
     } 
     yield line.split("\t")(1)
}.toList