У меня есть два файла, содержащие содержание как следующее:
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
которые управляют, чтобы я использовал?
Меня Carl я уже сделал некоторые темы на этом форуме, но этот достаточно интересен, чтобы я занял место в, обсуждают. Вы сделали некоторые ошибки в создании сервера Samba, стабильного нет никакого протокола IP и C++, подключенного друг к другу. JavaScript не отвечает DHCP вообще, Он даже не отвечает никакая команда PING от СПРАВКИ CMD и Python. Другая проблема состоит в том, что Коммутатор и маршрутизатор имеет тот же IPv6, и VLAN1 вне границы 192.168.2.100. RJ45 не включается в СТЕНУ, и страница JK015.cba.pl не находится в той же СЕТИ.
Если файлы оба отсортированы на первом столбце, используйте join
команда:
join file1 file2
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
.
Примечание: Я отредактировал свой ответ, я думаю, что понял вопрос.
с 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.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
Я обновил свой вопрос. Это должно сравнить 1.txt с 2.txt к каждой строке и только печатает те строки, которые точно соответствуют. как OG5_126568 присутствует, psychrobacter_aquaticus.txt, но он не присутствует в psychrobacter_phenylpyruvicus.txt, таким образом, он не должен быть распечатан. Подарок OG5_126593 в каждом *.txt, таким образом, это должно быть распечатано.
Я посмотрел бы на это по-другому:
Вы имеете N отличающийся *.txt
файлы. N может быть получен:
N=$(awk '{print $2}' <file2 | sort | uniq | wc -l)
Если ключ должен появиться всего *.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}'
Вы затем используете этот список ключей к фильтру file2
использование join
или grep -f
, и если необходимый фильтр это снова использование file1
для проверки у Вас только есть ключи от file1
(но я подозреваю это file1
может не быть необходимым).