сравнение содержания и производит новый файл

У меня есть два файла, содержащие содержание как следующее:

File 1

OG5_126568
OG5_126583
OG5_126593
OG5_126596
OG5_126599
OG5_126609

File2

OG5_126568  psychrobacter_aquaticus.txt WP_021813339.1
OG5_126583  psychrobacter_aquaticus.txt WP_040642027.1
OG5_126583  psychrobacter_phenylpyruvicus.txt   WP_028858051.1
OG5_126585  psychrobacter_piscatorii.txt    WP_058023688.1
OG5_126593  psychrobacter_aquaticus.txt WP_021813641.1
OG5_126593  psychrobacter_aquaticus.txt WP_021814787.1
OG5_126593  psychrobacter_piscatorii.txt WP_021814787.1
OG5_126593  psychrobacter_phenylpyruvicus.txt   WP_021814787.1

Я хочу выдержать сравнение, мой первый файл со вторым файлом и произвести новый файл содержит только подобранное содержание.

produced file

    OG5_126593  psychrobacter_aquaticus.txt WP_021813641.1
    OG5_126593  psychrobacter_aquaticus.txt WP_021814787.1
    OG5_126593  psychrobacter_piscatorii.txt WP_021814787.1
    OG5_126593  psychrobacter_phenylpyruvicus.txt   WP_021814787.1

которые управляют, чтобы я использовал?

enter image description here

-1
задан 3 March 2019 в 04:59

6 ответов

Меня Carl я уже сделал некоторые темы на этом форуме, но этот достаточно интересен, чтобы я занял место в, обсуждают. Вы сделали некоторые ошибки в создании сервера Samba, стабильного нет никакого протокола IP и C++, подключенного друг к другу. JavaScript не отвечает DHCP вообще, Он даже не отвечает никакая команда PING от СПРАВКИ CMD и Python. Другая проблема состоит в том, что Коммутатор и маршрутизатор имеет тот же IPv6, и VLAN1 вне границы 192.168.2.100. RJ45 не включается в СТЕНУ, и страница JK015.cba.pl не находится в той же СЕТИ.

0
ответ дан 12 April 2019 в 05:30

Если файлы оба отсортированы на первом столбце, используйте join команда:

join file1 file2
1
ответ дан 26 October 2019 в 03:02

grep может быть предоставлен файлом, который содержит шаблоны для поиска:

$ grep -f 1.txt 2.txt
OG5_126568  psychrobacter_aquaticus.txt WP_021813339.1
OG5_126583  psychrobacter_aquaticus.txt WP_040642027.1
OG5_126593  psychrobacter_aquaticus.txt WP_021813641.1
OG5_126593  psychrobacter_aquaticus.txt WP_021814787.1

Это распечатает каждую строку от 2.txt это содержит любой из поданных шаблонов 1.txt.

1
ответ дан 26 October 2019 в 03:02

Примечание: Я отредактировал свой ответ, я думаю, что понял вопрос.

с Miller (здесь последний двоичный файл Linux https://github.com/johnkerl/miller/releases/download/5.4.0/mlr.linux.x86_64) можно начать собирать количество файлов

mlr --nidx --fs ' ' --repifs cut -f 2 then uniq -a 2.txt | wc -l >./filesnumber.txt

Им 3 года:

psychrobacter_aquaticus.txt
psychrobacter_phenylpyruvicus.txt
psychrobacter_piscatorii.txt

Затем можно собрать отличных пар случаев с

mlr --nidx --fs ' ' --repifs cut -f 1,2 then uniq -a 2.txt >./distinctValues.txt

Это

OG5_126568 psychrobacter_aquaticus.txt
OG5_126583 psychrobacter_aquaticus.txt
OG5_126583 psychrobacter_phenylpyruvicus.txt
OG5_126585 psychrobacter_piscatorii.txt
OG5_126593 psychrobacter_aquaticus.txt
OG5_126593 psychrobacter_piscatorii.txt
OG5_126593 psychrobacter_phenylpyruvicus.txt

Затем можно отфильтровать только запись в который для поля 1 существует отличное количество значений 3

mlr --nidx --ifs ' ' --repifs cut -f 1 then count-distinct -f 1 \
then filter '$count=='"$(cat filesnumber.txt)"'' \
then cut -f 1 distinctValues.txt >./okValue.txt

Это дает Вам, что Вы хотите: OG5_126593.

И в конце можно применить соединение

mlr --nidx --fs ' ' --repifs join -j 1 -f okValue.txt 2.txt

Это отдает Вас

OG5_126593 psychrobacter_aquaticus.txt WP_021813641.1
OG5_126593 psychrobacter_aquaticus.txt WP_021814787.1
OG5_126593 psychrobacter_piscatorii.txt WP_021814787.1
OG5_126593 psychrobacter_phenylpyruvicus.txt WP_021814787.1

Я использовал эти два входных файла

OG5_126568
OG5_126583
OG5_126593
OG5_126596
OG5_126599
OG5_126609


OG5_126568  psychrobacter_aquaticus.txt WP_021813339.1
OG5_126583  psychrobacter_aquaticus.txt WP_040642027.1
OG5_126583  psychrobacter_phenylpyruvicus.txt   WP_028858051.1
OG5_126585  psychrobacter_piscatorii.txt    WP_058023688.1
OG5_126593  psychrobacter_aquaticus.txt WP_021813641.1
OG5_126593  psychrobacter_aquaticus.txt WP_021814787.1
OG5_126593  psychrobacter_piscatorii.txt WP_021814787.1
OG5_126593  psychrobacter_phenylpyruvicus.txt   WP_021814787.1
1
ответ дан 26 October 2019 в 03:02

Смотрите на ниже команды (предполагающий, что первый файл 1.txt, второй файл 2.txt):

$ awk 'NR==FNR{a[$1]++;next} a[$1] ' 1.txt 2.txt 
OG5_126568  psychrobacter_aquaticus.txt WP_021813339.1
OG5_126583  psychrobacter_aquaticus.txt WP_040642027.1
OG5_126593  psychrobacter_aquaticus.txt WP_021813641.1
OG5_126593  psychrobacter_aquaticus.txt WP_021814787.1

Обратите внимание что в Вашем ожидаемом выводе следующая строка:

OG5_126568  psychrobacter_phenylpyruvicus.txt   WP_040642027.1

Кажется:

OG5_126583  psychrobacter_aquaticus.txt WP_040642027.1
0
ответ дан 26 October 2019 в 03:02

Я обновил свой вопрос. Это должно сравнить 1.txt с 2.txt к каждой строке и только печатает те строки, которые точно соответствуют. как OG5_126568 присутствует, psychrobacter_aquaticus.txt, но он не присутствует в psychrobacter_phenylpyruvicus.txt, таким образом, он не должен быть распечатан. Подарок OG5_126593 в каждом *.txt, таким образом, это должно быть распечатано.

Я посмотрел бы на это по-другому:

  1. Вы имеете N отличающийся *.txt файлы. N может быть получен:

    N=$(awk '{print $2}' <file2 | sort | uniq | wc -l)
    
  2. Если ключ должен появиться всего *.txt файлы, затем для такого ключа необходимо найти различных ключевых-txt пар N (независимо от WP -* части). Это число может быть получено как это для каждого ключа:

    awk '{print $1 " " $2}' <file2 | sort | uniq | awk '{print $1}' | uniq -c
    

    таким образом, ключи, которые происходят времена N, получены:

    awk '{print $1 " " $2}' <file2 | sort | uniq | awk '{print $1}' | uniq -c | grep -E "^\s+$N" | awk '{print $2}'
    
  3. Вы затем используете этот список ключей к фильтру file2 использование join или grep -f, и если необходимый фильтр это снова использование file1 для проверки у Вас только есть ключи от file1 (но я подозреваю это file1 может не быть необходимым).

0
ответ дан 26 October 2019 в 03:02

Другие вопросы по тегам:

Похожие вопросы: