2016-07-26 6 views

Antwort

0

Nur eine Art und Weise,

for file in `cat tmp1` 
do 
     for f in `cat tmp2` 
     do 
       echo $file $f 
     done 
done 
+0

[Lesen Sie keine Zeilen mit 'for'] (http://mywiki.wooledge.org/DontReadLinesWithFor). Im Allgemeinen ist es besser, ein Werkzeug für die Textverarbeitung zu verwenden. –

1

Wenn Reihenfolge der Zeilen ist nicht so wichtig zu tun gefunden

awk 'FNR==NR{a[$0];next}{for(i in a){print $0,i}}' tmp2 tmp1 

Wenn Sie die Bestellung wiederherstellen möchten:

awk 'FNR==NR{a[FNR]=$0;l=FNR;next}{for(i=1;i<=l;i++){print $0,a[i]}}' tmp2 tmp1 
+0

Ich weiß nicht, warum Sie gerade 'nawk' vorschlagen; Dies sollte in jeder Version funktionieren. Sie können 'a [++ n] = $ 0' im ersten Block verwenden, um die Anzahl der Zeilen zu verfolgen. –

1
$ while read a; do while read b; do echo $a $b; done<tmp1; done<tmp2 
vol1 1 
vol1 2 
vol1 3 
vol2 1 
vol2 2 
vol2 3 

Oder mit einer schöneren Einbuchtung:

while read a; do 
    while read b; do 
     echo $a $b 
    done <tmp1 
done <tmp2 

Für jedes Wort in der tmp2 Datei, Echo durch jedes Wort in der tmp1 Datei gefolgt.

Wenn die tatsächlichen Daten in den beiden Dateien enthalten, Schrägstriche, oder wenn die tmp2 Datei Striche in der ersten Spalte enthält, dann die folgende wird eine bessere und robustere Lösung sein:

while read -r a; do 
    while read -r b; do 
     printf '%s %s\n' "$a" "$b" 
    done <tmp1 
done <tmp2 
+0

Ich würde vorschlagen, immer 'read -r' zu verwenden und Ihre Variablen zu zitieren. Überlegen Sie sich auch, 'printf '% s% s \ n'" $ a "" $ b "' zu verwenden. –

+0

@TomFenech Sie haben Recht, aber wir haben bestimmte Daten erhalten. Ich werde jedoch die Antwort aktualisieren. – Kusalananda

+0

@TomFenech Was ist der Vorteil von printf in diesem Fall? Und auch, da es keine Rolle spielt, ob die Variablen Leerzeichen enthalten, ist in diesem Fall streng genommen kein Zitat erforderlich. – Kusalananda

Verwandte Themen