2017-03-03 3 views
1

zu tun. Bitte sehen Sie Beispiel: Angenommen, ich habe File1.txt mit drei Zeilen (a, b, c); Datei 2 hat auch 3 Zeilen (1,2,3).Gibt es eine Möglichkeit, Zeile für Zeile Kombination von zwei Dateien mit Bash-Shell

File1

a 
b 
c 

Datei 2

1 
2 
3 
... 

Ich möchte ein File3 erhalten wie folgt:

Datei 3

a1 
a2 
a3 
b1 
b2 
b3 
c1 
c2 
c3 
... 

Vielen Dank!

+0

@CharlesDuffy 'paste' doesn‘ t tu dies. – Barmar

+0

Legen Sie den Inhalt der zwei Dateien in Arrays. Verwenden Sie dann verschachtelte Schleifen, um alle Kombinationen zu drucken. – Barmar

+0

@CharlesDuffy Es ist irgendwie wie 'Join', außer dass es nichts gibt an dem man sich anschließen kann. Ich glaube nicht, dass es etwas gibt, das ein vollständiges Cross-Produkt macht. – Barmar

Antwort

1

Unter der Annahme, bash 4.x:

#!/usr/bin/env bash 
#    ^^^^-- NOT /bin/sh 

readarray -t a <file1 # read each line of file1 into an element of the array "a" 
readarray -t b <file2 # read each line of file2 into an element of the array "b" 
for itemA in "${a[@]}"; do 
    for itemB in "${b[@]}"; do 
    printf '%s%s\n' "$itemA" "$itemB" 
    done 
done 

Auf einem älteren (vor 4.0) Freisetzung von bash, können Sie ersetzen readarray -t a <file1 und readarray -t b <file2 mit:

IFS=$'\n' read -r -d '' -a a < <(cat -- file1 && printf '\0') 
IFS=$'\n' read -r -d '' -a b < <(cat -- file2 && printf '\0') 
Verwandte Themen