2017-07-26 3 views
0

In BASH Ich führe den folgenden Liner, um eine individuelle Spalte/Feld nach dem Aufteilen auf ein bestimmtes Zeichen (man kann AWK auch wenn sie wollen sich auf mehr als ein Zeichen aufteilen, dh auf ein Wort in beliebiger Reihenfolge, ok).Wie man bestellt, definiert oder alle Spalten außer oder nach oder vor einer bestimmten Spalte

#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- 

Hinweis des letzte Befehl oben, Wie kann ich die gleiche letzte cut Befehl Scheiße in Groovy zu tun?

Für Ex: wenn der Inhalt in einer Datei und sie wie folgt aussehen:

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

ich folgende Groovy-Code versucht, aber es gibt nicht mich lori-chuck shenzi (dh nach der sechsten Kugel und erste Vorkommen ignoriert die -, mag ich meine Ausgabe lori-chuck shenzi und das folgende Skript ist mir sein Rückkehr nur lori (was mir die korrekte Ausgabe als mein Index [1] im folgenden Code wird givning ist, damit ich weiß, dass).

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 

Auch gibt es einen einfachen Weg für die letzte Zeile in der Datei oben, wenn ich Groovy-Code verwenden kann, um die Reihenfolge der Spalten nach der Aufspaltung zu ändern, also die Reihenfolge umzukehren wie in Python [1:], [ 1], [: -1] etc .. oder in irgendeiner Art und Weise

Antwort

0

Ich mag diese Lösung nicht, aber ich habe das getan, damit es funktioniert. Indexwerte von [1..-1 (dh vom 1.-Index, mit Ausnahme des 0-ten Index, ist die linke Seite des ersten Auftretens von - character) nach dem Aufstehen hatte ich die [ und ] (LIST) entfernen unter Verwendung von join(',') und dann jede , mit einem Ersatz - um das Endergebnis zu bekommen, wonach ich gesucht habe.

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

Ich würde noch gerne wissen, was ist eine bessere Lösung, und wie können diese Arbeit, wenn wir reden über Kirsche + einzelne Spalten Kommissionierung in einer bestimmten Reihenfolge (anstelle von mir verschiedene Groovy Aussagen Schreiben von einzelnen Elemente zu holen die Zeichenfolge/Liste pro Anweisung).

0

Wenn ich Ihre Frage richtig zu verstehen, was Sie wollen, ist:

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

Dies wird Ihnen von Position 1 bis die letzte. Sie können -2 (vorletzte) usw. ausführen, aber beachten Sie, dass Sie eine ArrayIndexOutOfBoundsException auch rückwärts bewegen können, wenn Sie über den Anfang Ihres Arrays hinausgehen!

- Original Antwort ist oberhalb dieser Linie -

auf meine Antwort hinzufügen, da Kommentare keine Code-Formatierung ermöglichen. Wenn alles, was Sie wollen, ist, bestimmte Spalten auswählen, und Sie wollen einen String am Ende, könnte man so etwas wie:

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

und aussuchen, was Spalten Sie auf diese Weise wollen. Ich dachte, Sie suchen nach einer allgemeineren Lösung, aber wenn nicht, sind bestimmte Spalten einfach!

Wenn Sie den ersten Wert, einen Strich wollen, dann der Rest durch Leerzeichen verbunden, benutzen Sie einfach:

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

Ich weiß nicht, wie Sie für jede Kombination konkrete Antworten geben, die Sie wünschen konnte, aber Sobald Sie Ihre Werte in einer Liste haben, können Sie diese beliebig manipulieren und die Ergebnisse mit GStrings oder mit .join (...) wieder in eine Zeichenkette umwandeln.

+0

Sie können auch reverse() aufrufen, wenn Sie möchten. Beispiel: line.split ('-') [1 ..- 1] .reverse() – Daniel

+0

Eigentlich ganz in der Nähe, aber was ich jetzt in der Auswahlliste des Active Choice-Plugins bekommen habe, ist, anstatt ein STRING ie 'lori-chuck zu bekommen Shenzi, ich habe '[lori, chuck, shenzi]' dh es hat eine LISTE erstellt, die nicht das ist, wonach ich gesucht habe. Ich habe auch 'return list.toString()' versucht, aber jetzt sehe ich nichts mehr im Active Choice-Plugin (wo ich diesen groovigen Code ausgeführt habe) in Jenkins. –

Verwandte Themen