Frage

Ich habe Datei1

A,B,C

und Datei2

D,E,F

Ich versuche es zu haben

AD, AE, AF, BD, BE, BF, CD, CE, CF 

erfolglos von

echo {`cat File1`}{`cat File2`}

geben

{A,B,C}{D,E,F}

Wie können Sie das Problem durch ZSH/AWK lösen?

War es hilfreich?

Lösung

awk -F, '
    NR==FNR {
        # read lines from File1 into the array f1
        f1[NR]=$0
        next
    }
    {
        # foreach line in File2
        split(f1[FNR], words);    # get words from corresponding line in File1
        sep = ""
        for (i in words) {
            for (j=1; j<=NF; j++) {
                printf("%s%s%s", sep, words[i], $j)
                sep = ", "
            }
        }
        print ""
    }
' File1 File2

Wenn Datei1 enthält

A,B,C
1,2,3

und Datei2 enthält

D,E,F
4,5,6

Dann gibt das awk -Skript aus

AD, AE, AF, BD, BE, BF, CD, CE, CF
14, 15, 16, 24, 25, 26, 34, 35, 36

Andere Tipps

Ich weiß nicht ZSH, hier ist, was ich mit Bash und SED gemacht habe:

echo "A,B,C" >a
echo "D,E,F" >b
for i in `cat a | sed -e "s@,@\n@g"`; 
      do for j in `cat b | sed -e "s@,@\n@g"`; 
      do echo -n "$i$j, "; 
      done ; 
      done | sed -e "s@,\s\$@@"

Die Ausgabe ist dann:

AD, AE, AF, BD, BE, BF, CD, CE, CF
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top