Wpis z mikrobloga

czy używając opcji shuf można wybrać po 1 linii z 2 plików i zapisać do jednego pliku, np. output.txt?
plik sample1.txt zawiera: 1, 2, 3, 4, 5
plik sample2.txt zawiera: a,b,c,d,e

shuf -n 1 sample1.txt -o output.txt && shuf -n 1 sample2.txt -o output.txt


W tym układzie druga operacja nadpisuje pierwszą i zachowuje się tylko jeden wynik. Np 2 albo c.
A chciałbym mieć losowe wyniki: "3 e", "2 c", "4 a" w pliku output.txt. Jakieś pomysły jak to zrobić?
#linux
  • 3
@antek_akrobata: raczej nie da się tego aż tak trywialnie zrobić. Wykorzystałbym awk do tego, jakąś prostą pętlę w bashu albo robił shuf do plików a potem sklejał input paste:

cat int.txt char.txt
1
2
3
4
5
6
a
b
c
d
e
f


shuf char.txt > char_r.txt
shuf int.txt > int_r.txt
paste -d\ int_r.txt char_r.txt
3 e
4 b
5 a
2 c
6 f
1 d
W tym układzie druga operacja nadpisuje pierwszą i zachowuje się tylko jeden wynik. Np 2 albo c. A chciałbym mieć losowe wyniki: "3 e", "2 c", "4 a" w pliku output.txt. Jakieś pomysły jak to zrobić?


@antek_akrobata: Zakładając, że plik sample1.txt to:

1
2
3
4
5
6

a plik sample2.txt:

a
b
c
d
e
f

Wystarczy zastosować substytucję poleceń w bash'u i wykonać następujące polecenie:

$ printf "%s
@antek_akrobata:

II Sposób rozwiązania powyższego zadania przy założeniu, że teraz plik sample1.txt ma taką zawartość:

1, 2, 3, 4, 5, 6

a plik sample2.txt taką:

a, b, c, d, e, f

--

Rozwiązanie:

(IFS=', ' read -a t1 0>output.txt

Przykładowa zawartość pliku wynikowego output.txt po kilku uruchomieniach powyższego polecenia:

4 d
5 b
3 c
6 a
1 c
2 f