2017-07-26 78 views
0

在BASH 中,我运行以下一行代码,以便在给定字符上分割后获得单独的列/字段(如果使用AWK,也可以使用if他们想要在多个字符上分割,即以任何顺序在单词上分割,确定)。如何获得给定列以外或之前或之后的有序列,定义列或所有列

#This will give me first column i.e. 'lori' i.e. first column/field/value after splitting the line/string on a character '-' here 
echo "lori-chuck-shenzi" | cut -d'-' -f1 

# This will give me 'chuck' 
echo "lori-chuck-shenzi" | cut -d'-' -f2 

# This will give me 'shenzi' 
echo "lori-chuck-shenzi" | cut -d'-' -f3 

# This will give me 'chuck-shenzi' i.e. all columns after 2nd and onwards. 
echo "lori-chuck-shenzi" | cut -d'-' -f2- 

注意上面的最后一个命令,我怎样才能做到在Groovy中相同的最后cut命令狗屎?

对于例如:如果内容是在一个文件中,他们看起来像:

1 - a 
2 - b 
3 - c 
4 - d 
5 - e 
6 - lori-chuck shenzi 
7 - columnValue1-columnValue2-columnValue3-ColumnValue4 

我尝试以下Groovy代码,但它不是给我lori-chuck shenzi(即忽略了第六子弹,第一次出现后,在-的,我希望我的输出为lori-chuck shenzi和下面的脚本将返回我只是lori(这是givning我正确的输出作为我的指标是在下面的代码[1],所以我知道这一点)。

def file = "/path/to/my/file.txt" 

File textfile= new File(file) 

//now read each line from the file (using the file handle we created above) 
textfile.eachLine { line -> 
    //list.add(line.split('-')[1]) 
    println "Bullet entry full value is: " + line.split('-')[1] 
} 
// return list 

另外,如果我可以使用Groovy代码在分割后更改列的顺序,即颠倒Python的顺序,我们可以在上面的文件的最后一行中找到简单的方法[1:],[ :1],[:-1]等。或者以某种方式

回答

0

我不喜欢这个解决方案,但我这样做是为了让它工作。从[1..-1获得索引值(即从第一个索引开始,不包括第一个匹配的-字符的第一个左边的第0个索引)后,我必须使用join(',')删除[](LIST),然后用,替换任何,-以获得最终结果,我正在寻找。

list.add(line.split('-')[1..-1].join(',').replaceAll(',','-'))

我还是想知道什么是更好的解决方案,以及如何能当我们谈论采摘樱桃在一个给定的顺序各列+(而不是我写的各种Groovy的语句来接从单个元素这项工作每个语句的字符串/列表)。

0

如果我理解正确你的问题,你想要的是:

line.split('-')[1..-1] 

这会给你从位置1至持续。你可以做-2(接近最后)等等,但只要知道你可以得到一个ArrayIndexOutOfBoundsException向后移动,如果你超过了你的数组的开始!

- 原来的答复是这条线之上 -

添加到我的答案,因为评论不允许代码格式化。如果你想要的是选择特定的列,你到底想要一个字符串,你可以这样做:

def resultList = line.split('-') 
def resultString = "${resultList[1]}-${resultList[2]} ${resultList[3]}" 

,并选择你想要的任何列的方式。我以为你正在寻找更通用的解决方案,但如果没有,特定的列很容易!

如果你想第一个值,一个破折号,然后用空格加入剩下的,只是使用:

"${resultList[1]}-${resultList[2..-1].join(" ")}" 

我不知道该怎么给你,你可能希望每一个组合的具体答案,但基本上,一旦你在列表中有你的值,你可以操纵它,然后将结果转换回带有GStrings或.join(...)的字符串。

+0

如果你愿意,你也可以调用.reverse()。例如:line.split(' - ')[1 ..- 1] .reverse() – Daniel

+0

实际上安静的关闭,但现在我在主动选择插件的可用选择列表中获得的是,而不是获得STRING,即'lori-chuck shenzi,我得到了'[lori,chuck,shenzi]'即它创建了一个LIST,这不是我正在寻找的。我也尝试过'return list.toString()',但现在我在Jenkins中看不到任何Active Choice插件(我在运行这个常规代码的地方)。 –

相关问题