2016-11-18 5 views
0

ich eine große Anzahl von Dateien mit Dateinamen des Formatseine (variable) String aus Dateinamen extrahieren

OUTPUT_11_0.175

Ich möchte extrahieren die beiden Zahlen, ich schaffte es die zweite Nummer haben mit die folgenden:

for file in ./dir/*; do 
phi=${file##*_} 
echo "$phi" 
done 

Um die andere Nummer 11 in diesem Fall zu erhalten, habe ich versucht,

a=${file#*_} 

aber das gibt alles auf der linken Seite des ersten Unterstrichs zurück (das Verzeichnis enthält einen Unterstrich) - gibt es eine Möglichkeit, bash zu überzeugen, zum Lesen 'zwischen' die beiden Unterstriche zu gehen und '11' zurückzugeben?

+0

'set - $ {Datei // _ /}; echo "$ 2 $ 3" ​​'? – Cyrus

Antwort

2
$ IFS=_ read -a foo <<< "OUTPUT_11_0.175" 
$ echo "${foo[0]}" 
OUTPUT 
$ echo "${foo[1]}" 
11 
$ echo "${foo[2]}" 
0.175 
+0

Ich fand ~ http://tldp.org/LDP/abs/html/x17837.html#HERESTRINGSREF half mir zusammen, was das bedeutete. –

+0

Es wäre schön zu erklären, dass 'IFS = _' das interne Feldtrennzeichen auf' _' setzt, was dazu verwendet wird, den Herestring um '_' in ein' foo' Array zu teilen – Aaron

Verwandte Themen