2017-05-05 3 views
0

Ich möchte eine Datei basierend auf der Nummer (1 bis 30) in der ersten Spalte filtern und eine Datei für die Zeilen speichern, die den Filterparametern entsprechen. Also sollten am Ende 30 Dateien erstellt werden. Ich versuche dies mit einer for-Schleife mit Shell und awk, aber es funktioniert nicht.Mehrere Dateien von einer awk-Befehlszeile speichern

for ((K=1; K <= 30; K++)); do awk '{if($1==$K) print $0}' example_file.map > example_file_CHR${K}.map; done 
+0

[bearbeiten] Ihre Frage, um präzise, ​​testbare Beispieleingabe und erwartete Ausgabe zu enthalten. Wir benötigen keine Beispiel-Eingabedatei mit mehr als 30 Zeilen und 30 Ausgabedateien, um Ihr Problem zu demonstrieren - 3 statt 30 sollten gut funktionieren. –

Antwort

1

, was Sie brauchen so etwas wie dieses ...

awk '1<=$1 && $1<=30 {print > "file_"$1}' file 

keine Notwendigkeit für eine die Bash-Schleife.

+0

Vielen Dank für den Vorschlag. Eigentlich könnte ich das Problem mit der folgenden Befehlszeile lösen: für K in {1..30}; mach awk -v a = $ K '{if ($ 1 == a) drucke $ 0}' ../plink_gwas_sample_filtered_maf_geno_02_03_17.map> plink_gwas_subfert_CHR $ {K} .map; getan –

+0

ja, es gibt mehrere Möglichkeiten, eine Aufgabe zu implementieren, die Sie Leistung, Wartbarkeit, Compliance, Einfachheit etc. beurteilen müssen. – karakfa

+0

Danke, Karakfa! –

Verwandte Themen