سؤال

لدي العديد من الملفات مع نتائج الأمر: UNIQ -C Some_File> some_file.out

على سبيل المثال: 1.Out:

 1 a 2 b 4 c

2.Out.

 2 ب 8 ج

أود دمج هذه النتائج، لذلك أحصل على:

 1 4 ب 12 ج

اعتقدت أن هذا النوع أو UNIQ يمكن التعامل معها ولكني لا أرى أي خيار يتعلق به. كتابة بعض Script Ruby / Perl هو إحدى الطرق للذهاب ولكن أود القيام بذلك بسهولة مع أوامر Core * Nix (مثل الفرز المذكور و UNIQ).

تحرير: أن تكون واضحة. ليس لدي ملفات أصلية ولدي دمج * ملفات.

شكرا للمساعدة!

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

المحلول

جربه awk:

awk '{ count[$2] += $1 } END { for(elem in count) print count[elem], elem }' 1.out 2.out 

نصائح أخرى

إنها مشكلة محددة للغاية، لذلك من غير المرجح أن تفعل أي أداة هذه افتراضيا. يمكنك البرنامج النصي في حلقة صغيرة بما فيه الكفاية (لا حاجة لضفة AWK)، تم تنفيذه في أي لغة نصية (حتى SH). لا أعتقد أن هناك طريقة أخرى.

هذا ليس خطيرا تماما (لكنه يعمل). أنا أحب حل فيليبكس.

cat 1.out 2.out |
{
    while read line; do
        for i in $(seq ${line% *}); do
            echo ${line#* }
        done
    done
} | sort | uniq -c

الإجابة المقبولة تعمل للقيم المحددة المقدمة في السؤال. إذا خرج uniq -c يحتوي على المزيد من الأماكن من مجرد واحد بين العدد والقيمة ولكن ما يلي awk البرنامج النصي لا اقتطاع الإخراج بعد الحقل الثاني:

awk '{ cnt=$1; $1=""; count[substr($0, 2)] += cnt } END { for(elem in count) print count[elem], elem }' 1.out 2.out
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top