У меня есть два .rtf файла.... Первый имеет это содержание:
Apple, оранжевая, банан, лапша, микросхема
Второй Файл - что-то вроде этого:
Apple I love eat Apple.
Banana I hate Banana.
Zoo I want to go Zoo.
Noodle Noodle can be a very very very very very very very very very very very long, but still is one line.
Chip Don't eat so many chip.
Orange Orange is great, not Apple plx. Noodle
Water Drinking water is boring.
Первый файл является "ключом" второго файла.
Во втором файле первое слово является ключом каждой строки.
Каждый ключ и предложение во втором файле, ТОЛЬКО имейте одну строку. Второй Файл имеет много строк с ключами, но не все ключи присутствуют в file1
, но file1
ключ ДОЛЖЕН быть во втором файле.
Как может я получать результат как это: (Должен отсортировать по ключу от file1
)
Apple, Apple I love eat Apple.
Orange, Orange is great, not Apple plx.
Banana, I hate Banana.
Noodle, can be a very very very very very very very very very very very long, but still is one sentence.
Chip, Don't eat so many chip.
Я сделаю некоторые предположения (с которым Вы, кажется, соглашаетесь в Вашем вопросе).
| tail -1
"для проявления просто первого соответствия (говорят)rtf
файлы, но тег вопрос как text
.вот сценарий для Вас,
#!/bin/bash IFS="," # -> to look for comma separated words in key.txt for k in $(sed 's| ||' key.txt) # -----------> to make the search easier do grep "^$k " data.txt # ----> look for key words matching at the start of each line done
Здесь key.txt
Ваш первый файл и data.txt
Ваш второй файл.
for
цикл сортирует вывод в порядке ключей.
sed
команда удаляет любые пробелы, которые Вы можете иметь в key.txt
файл для создания поиска легче.
Обновление на неанглийских символах (который является, почему это кажется Вами, говорят что файл RTF):
Искать iconv
и получите свой RTF, преобразованный в UTF-8 - я думаю grep
может обработать это.
Если, именно это Вы хотите сделать, Ваш вопрос должен быть перефразирован как,
Если Вам не был нужен результат, отсортированный в порядке файла ключей:
sed 's/, /\n/g' keyfile.txt | grep -f - datafile.txt
Чтобы сделать сортировку, Вы могли сделать что-то вроде этого (в Bash):
sed 's/, /\n/g' keyfile.txt | grep -f - datafile.txt | sort | join -1 2 <(sed 's/, /\n/g' keyfile.txt | nl | sort -k2) - | sort -k2 | cut -d' ' -f1,3-
Этот сценарий Perl сделает это:
#!/usr/bin/perl
use strict;
use warnings;
open (my $f1, '<', $ARGV[0]) || die "cannot open $ARGV[0] $!\n";
open (my $f2, '<', $ARGV[1]) || die "cannot open $ARGV[1] $!\n";
my $line=join('',<$f1>);
my @f2=<$f2>;
foreach my $e1 (sort split /, /,$line) {
foreach my $e2 (@f2) {
print "$e1, $e2" if ($e2=~/^$e1/);
}
}