2016-07-12 8 views
0

Ich habe Dateinamen wie folgt (weggelassen die tatsächlichen Namen) Ich muss den Dateinamen zwischen dem Dateinamen_prefix und Runid Problem hier ist der Dateiname ändert und ist 2-5 Felder lang . Ich habe mit diesemAusschneiden einer Zeichenfolge zwischen zwei Variablen Sub-Zeichenfolgen in Shell

echo "filename_prefix_filename_filename_filename_runid_date_part-r-00020-c68fdc43-53bc-4aa9-a96b-2692ae2aa508.orc " | awk 'NR > 1 {print $1}' RS='filename_prefix' FS='runid' 

Dies funktioniert auf der Kommandozeile in Ordnung, aber ich brauche RS und FS als Variablen zu übergeben, die ich nicht in der Lage bin, weil

echo of file name |awk -v file_p=$file_prefix -v r_id=_$RUN_ID 'NF > 1 {print $1}' RS=file_p FS=r_id 

der obigen Befehl doesn zu tun arbeite nicht.

Dateinamen:

filename_prefix_filename_filename_filename_runid_date_part-r-00020-c68fdc43-53bc-4aa9-a96b-2692ae2aa508.orc 

filename_prefix_filename_filename_runid_date_part-r-00020-c68fdc43-53bc-4aa9-a96b-2692ae2aa508.orc 

Antwort

1

Weil du noch RS und FSaußerhalb das awk Skript selbst einstellen, verwenden Sie die Shell-Variable, nicht awk Variablen.

... | awk 'NF > 1 {print $1}' RS="$file_prefix" FS="$RUN_ID" 

Alternativ können Sie

... | awk -v RS="$file_prefix" -v FS="$RUN_ID" 'NF > 1 {print $1}' 

oder

... | awk -v file_p="$file_prefix" -v runid="$RUN_ID" 'BEGIN{RS=file_p; FS=runid}; NF > 1 {print $1}' 

Die letzte, obwohl verwenden, ist unnötig indirekt.

+0

Danke. Lief wie am Schnürchen. Verstanden die Arbeit von awk, danke für die Hilfe – zeushvk

1

Die Zuweisungen zu RS und FS sind falsch. Sie können hier keine Awk-Variablen verwenden. Sie werden einfach als statische Strings interpretiert (was die einzige Anordnung ist, die sowieso Sinn macht).

awk 'NF > 1 {print $1}' RS="$file_prefix" FS="_$RUN_ID" 
+0

Verstanden, wo ich falsch ging .. Danke – zeushvk

1

Sie das gleiche in bash tun können, obwohl ein zweistufiger Prozess

$ f="filename_prefix_filename_filename_filename_runid_date_part-r-00020-c68fdc43-53bc-4aa9-a96b-2692ae2aa508.orc"; 
    pre="filename_prefix_"; 
    run="_runid*"; 

$ ff=${f%$run}; echo ${ff#$pre} 

filename_filename_filename 
Verwandte Themen