2011-05-26 15 views
11

Bash'ta benzer Python zip() işlevi var mı? Belirli olmak gerekirse, piton kullanmadan bash equivilent işlevsellik için arıyorum:Python zip() davranış?

$ echo "A" > test_a 
$ echo "B" >> test_a 
$ echo "1" > test_b 
$ echo "2" >> test_b 
$ python -c "print '\n'.join([' '.join([a.strip(),b.strip()]) for a,b in zip(open('test_a'),open('test_b'))])" 
A 1 
B 2 
+0

: neden bu durumda python kaçıyorsun? Bunu bir PBS komut dosyasına yerleştirerek – dusktreader

+1

. Mümkün olduğunca basit tutmak ister ama python – daniel

cevap

14

Saf bash:

[email protected]:~$ zip34() { while read word3 <&3; do read word4 <&4 ; echo $word3 $word4 ; done } 
[email protected]:~$ zip34 3<a 4<b 
alpha one 
beta two 
gamma three 
delta four 
epsilon five 
[email protected]:~$ 

(eski yanıt) join bak.

liori:~% cat a 
alpha 
beta 
gamma 
delta 
epsilon 
liori:~% cat b 
one 
two 
three 
four 
five 
liori:~% join =(cat -n a) =(cat -n b) 
1 alpha one 
2 beta two 
3 gamma three 
4 delta four 
5 epsilon five 

(, sen =() operator like in zsh var varsayarak aksi takdirde daha karışık).

+0

kesinlikle buna karşı değildir. Daha önce bir araya baktım ama bir SQL üye – daniel

+0

gibi ortak tanımlayıcılara ihtiyaç duyduğunuz izlenim altındayken bu durumda işlev biraz daha esneklik katıyor. satırları "sıkıştırmak" ek olarak, aralarında bazı metinler eklemem gerekir. Teşekkürler! – daniel

+0

'(()' ın neyle ilgili bir bağlantınız var mı? Bunun için google imkansız. – Marian

4

kod

[tmp]$ echo "A" > test_a 
[tmp]$ echo "B" >> test_a 
[tmp]$ echo "1" > test_b 
[tmp]$ echo "2" >> test_b 
[tmp]$ cat test_a 
A 
B 
[tmp]$ cat test_b 
1 
2 
[tmp]$ paste test_a test_b > test_c 
[tmp]$ cat test_c 
A 1 
B 2 
0

Sen join ardından cat -n ile iki adımda bunu yapabilir. (cat -n her satırın başında hat numaraları ile dosya çoğalır join hat numaraları iki dosya katıldı..)

Sadece meraktan
$ echo "A" > test_a 
$ echo "B" >> test_a 
$ echo "X" > test_b 
$ echo "Y" >> test_b 
$ cat -n test_a > test_a.numbered 
$ cat -n test_b > test_b.numbered 
$ join -o 1.2 -o 2.2 test_a.numbered test_b.numbered 
A X 
B Y 
+0

ahhh .... işte böyle bir şeyle :) – daniel