2017-10-31 2 views
-1

meine Dateiliste ist unten wie:awk Schleife

12as.pdb 
132l.pdb 
135l.pdb 
13pk.pdb 

ich habe einen Befehl wie folgt aus:

awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' file1 file2 

Ich möchte eine Schleife bash schreiben, die diesen Befehl paarweise wie unten erzeugen:

awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' 12as.pdb 132l.pdb 

    awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' 12as.pdb 135l.pdb 

    awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' 12as.pdb 13pk.pdb 

kann jemand dieses Bash-Skript schreiben und mir bitte helfen?

+2

Willkommen bei Paketüberfluss! Stack Overflow ist ** NOT ** ein Code-Schreibdienst. Wir sind immer froh, neuen Codern zu helfen und zu unterstützen *, aber Sie müssen sich zuerst helfen. : -) * Es wird von Ihnen erwartet, dass Sie versuchen, den Code selbst zu schreiben. Bitte lesen Sie [So erstellen Sie ein minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve). –

Antwort

1

Hier ist ein Beispiel für ein Skript, das Sie es als Start nehmen können und lassen Sie mich wissen, wie es dann geht. Da Sie uns nicht viele Informationen über Beispiel Input_files und Outputs gegeben haben, also basierend auf Ihrer Frage hier ist die Antwort, trotz der Erstellung von Awks mehrere Male konnten wir eine Funktion dafür erstellen.

#!/bin/bash 
CHECK(){ 
awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' "$1" "$2" 
} 

CHECK 12as.pdb 132l.pdb 
CHECK 12as.pdb 135l.pdb 
CHECK 12as.pdb 13pk.pdb 

So ist die Logik eine Funktion awk Code setzen erstellen und Dateinamen als Argumente an es übergeben und diese Funktion mit unterschiedlichen Dateinamen aufrufen, die Sie weitergeben möchten.

+0

@down Wähler: Bitte erwähnen Sie den Grund der Abstimmung unten. – RavinderSingh13

+1

Ich habe nicht downvote, aber ich denke, aus dem Bearbeitungsverlauf zu sehen, es scheint, als ob Sie C-Style-Argumente an eine Bash-Funktion übergeben. – Inian

+0

@Inian, yeah Ich habe mit C und bash Syntaxen verwechselt, aber meine Logik war nur die gleiche, dann bearbeitet es nach BASH :) – RavinderSingh13

0

da nur Ihre zweite Datei

in einer Bash-Schleife eine Variable tun
for f in {1321,1351,13pk}.pdb; 
do 
    awk '....' 12as.pdb $f; 
done 

auch in Ihnen awk Skript ändern [$1$2]-[$1,$2] und $1$2 in a-($1,$2) in a, wenn Sie wissen, was Sie tun