2014-01-04 3 views
0

Я хотел использовать комлинк, чтобы сравнить 2 списка: один состоит из случайно сгенерированных слов:UNIX: использование комлинка без создания временных файлов

cat /dev/urandom | head -n 10000 | strings | tr 'A-Z' 'a-z' | sort 

другая является английским словарем:

wget -q0- <URL> | sort 

(Я не могу отдать URL-адрес) Я попытался сохранить оба списка во временные файлы, а затем использовал comm -12 file1 file2 , и он сработал, но теперь я хочу сделать это, не создавая эти временные файлы. Есть ли способ?

+0

Вам нужна оболочка POSIX или решение, использующее конструкции Bash или Zsh? – tripleee

+0

Bash приемлемо – socalledcomrad

ответ

1

Ваш код (с useless use of cat переработано) может быть тривиальным переписан использовать Bash process substitution:

comm <(head -n 10000 </dev/urandom | 
     strings | tr 'A-Z' 'a-z' | sort) <(wget -q0- <URL> | sort) 

Однако, если ваша цель не ускорить тепловую смерть вселенной, ваш код выглядит массивно неэффективен. Возможно, вам следует объяснить, что вы пытаетесь выполнить? (Плюс, если вы хотите найти частоту словарных слов в /dev/urandom выводах, я считаю, что strings будет отфильтровывать любые действительно короткие слова.)

+0

Я пересматривал для экзамена, и это было одно из упражнений, в котором конкретно упоминалось использование строк и задача, упомянутая, что эффективность на самом деле не проблема. В любом случае ваше решение сработало! благодаря ! – socalledcomrad

0

Btw i нашел другое решение, не используя comm.

((head -n 10000 </dev/urandom | strings | tr 'A-Z' 'a-z' | sort | uniq) ; (wget -q0- <URL> | sort)) | sort | uniq -d 

Это не очень эффективно, но работает (уник -d печатает только дублированные строки = строки в обоих файлах).

Смежные вопросы