2017-07-26 44 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插件(我在運行這個常規代碼的地方)。 –

相關問題