2016-07-29 5 views
0

Ich bin neu in Shell/Bash-Skripting. Ich möchte Daten aus mehreren Netcdf-Dateien mit dem Bash- oder Shell-Skript extrahieren. Jede Datei enthält eine Zeitreihe von Temperaturwerten. Zum Beispiel:Lesen Sie mehrere Dateien mit Bash-Skript/Shell-Skript

FileA.nc contains 20 20 21 22 23 24 
FileB.nc contains 23 24 25 26 27 24 
FileC.nc contains 21 20 19 18 22 23 

Ich mag die Werte pro Datei extrahieren und die Ergebnisse der drei Dateien zusammenführen. Die Ausgabe sollte so aussehen wie diese als CSV-Datei gespeichert.

A 20 20 21 22 23 24 
B 23 24 25 26 27 24 
C 23 24 25 26 27 24 

Was ist der einfachste Weg, dies zu tun? Vielen Dank im Voraus für die Hilfe.

+0

Ist 'A, B und so on' einzelne Sachen Charakter? – sjsam

+0

Mein awk-Skript gibt die erwartete Ausgabe, aber es sieht nicht wie die gültige CSV-Datei aus. – sjsam

+0

Erwartete Ausgabe weicht vom Inhalt von 'fileC.nc' ab. –

Antwort

3

können Sie fortfahren, as-

for i in {A..C} 
do 
echo -n "$i " >> master_file 
cat File"$i".nc >> master_file 
done 

Jetzt werden Sie eine riesige Datei mit angehängten einzelnen Dateien. Jetzt Räume in Komma zu machen (wenn Sie ein CSV-Format wollen)

sed -i 's/ /,/g' master_file 
+0

Ihre Frage schlug vor, dass die Dateien nur die Temperaturdaten hatten. Sie müssen genauer wissen, was Ihre einzelnen Eingabedateien enthalten. Bitte bearbeiten Sie Ihre Frage. – VM17

+0

Vielen Dank für die Hilfe, ich habe meinen vorherigen Kommentar hier gelöscht. Ich habe die falsche Datei vor einiger Zeit bearbeitet. Dies funktioniert bereits für mein Problem. Vielen Dank noch einmal – Lyndz

+0

Wenn es eine gültige Lösung ist, dann akzeptieren Sie es als Antwort. – VM17

1

awk ist dein Freund:

$ arry=(file{A..C}.nc) # store all the filenames in an array 
$ # Then feed all the files to awk like below 
$ awk '{printf "%s %s\n",gensub(/file(.)\.nc/,"\\1","1",FILENAME),$0}' "${arry[@]}" >newfile 
$ cat newfile 
A 20 20 21 22 23 24 
B 23 24 25 26 27 24 
C 21 20 19 18 22 23 

Hinweis

Dies erfordert, dass Sie haben [ gnu awk ], die ich euch schon vermuten haben.

0

In AWK:

$ awk '{gsub(/^file|\.nc$/,"",FILENAME); print FILENAME,$0}' file*.nc 
A 20 20 21 22 23 24 
B 23 24 25 26 27 24 
C 21 20 19 18 22 23