غير قادر على الجمع بين الكلمات في الملفات من قبل Zsh/AWK

StackOverflow https://stackoverflow.com/questions/803805

  •  03-07-2019
  •  | 
  •  

سؤال

لدي File1

A,B,C

و File2

D,E,F

أنا أحاول أن يكون

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

من قبل دون جدوى

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

إعطاء

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

كيف يمكنك حل المشكلة عن طريق Zsh/AWK?

هل كانت مفيدة؟

المحلول

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

إذا File1 يحتوي على

A,B,C
1,2,3

و File2 يحتوي على

D,E,F
4,5,6

ثم awk النصي النواتج

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

نصائح أخرى

أنا لا أعرف zsh, هنا هو ما فعلته مع باش و sed:

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\$@@"

الإخراج ثم هو:

AD, AE, AF, BD, BE, BF, CD, CE, CF
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top