Kolay kısmı, pastedosyalarınızın satırlarını birleştirmek için kullanabileceğinizdir . Onun -dseçenek, bir ayırıcı seçmelerini sağlar (burada bir .).
Buradaki zor kısım Kartezyen ürünüdür. SO bu cevabını ödünç alarak , şöyle bir komut verebiliriz:
paste -d '.' \
<(sed -n "$(yes 'p;' | head -n $(wc -l <file2.txt) )" file1.txt) \
<(cat $(yes 'file2.txt' | head -n $(wc -l <file1.txt)))
Biz neredeyiz:
- Birleştirin
yesve satır sayısına eşit sayıda birkaç satırın her satırını yazdıracak headbir sedkomut dosyası oluşturun ;file1.txtfile2.txt
- Birleştirin
yesve headyapmak catyazdırmak file2.txtsatır sayısına eşit bir kaç kez file1.txt;
pasteİki işlem yerine basılmış ( <(...)) ile basılmış her satır çiftini bir ile ayırarak birleştirmek için kullanın ..
Elbette sonucu diğer komutlara da aktarabilirsiniz.
Ayrıca, komutların çıktısını, bir döngü içinde olsalar bile, diğer cevaplarınızda olduğu gibi yönlendirebileceğinizi unutmayın. Örneğin, dene
while ... do ... done <file | cat -
Kolaylık sağlamak için, bir işlevi tanımlayabilir ve bunu ortamınız için kullanılabilir hale getirebilirsiniz (örneğin, .bashrckullanıyorsanız onu tanımlamak gibi bash).
Burada harici araçlara olan ihtiyacı en aza indirmek için döngüler kullanılıyor:
function cart_prod () {
while IFS= read -r line1; do
while IFS= read -r line2; do
printf '%s.%s\n' "$line1" "$line2"
done <"$2"
done <"$1"
}
Örnek kullanım:
$ cart_prod file1.txt file2.txt | sort -r
cc.site.com
cc.site3.com
cc.site2.com
bb.site.com
bb.site3.com
bb.site2.com
aa.site.com
aa.site3.com
aa.site2.com