>cat tmp1
1
2
3
>cat tmp2
vol1
vol2
diese Antwort zu erwartenZusammenführen von zwei Dateien in Shell wie Einfügen-Befehl
vol1 1
vol1 2
vol1 3
vol2 1
vol2 2
vol2 3
>cat tmp1
1
2
3
>cat tmp2
vol1
vol2
diese Antwort zu erwartenZusammenführen von zwei Dateien in Shell wie Einfügen-Befehl
vol1 1
vol1 2
vol1 3
vol2 1
vol2 2
vol2 3
Nur eine Art und Weise,
for file in `cat tmp1`
do
for f in `cat tmp2`
do
echo $file $f
done
done
[Lesen Sie keine Zeilen mit 'for'] (http://mywiki.wooledge.org/DontReadLinesWithFor). Im Allgemeinen ist es besser, ein Werkzeug für die Textverarbeitung zu verwenden. –
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
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. –
$ 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
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. –
@TomFenech Sie haben Recht, aber wir haben bestimmte Daten erhalten. Ich werde jedoch die Antwort aktualisieren. – Kusalananda
@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
bitte formatieren Frage richtig, überprüfe [fragen] und zeige deine Bemühungen. – fedorqui
Dies ist nicht wie der Befehl "Einfügen" überhaupt ... – Kusalananda