Принятие этого \t
s являются на самом деле вкладками, и что случаи находятся на том же столбце, и что единственные соответствия A, не AA. Позволить a
будьте файлом с A, B, C и b
файл, где Вы хотите считать соответствия на (второй Вы обеспечили).
Во-первых, необходимо получить только возможные соответствия от b
, игнорирование всего остального. Это - третий столбец b
, таким образом, мы можем использовать cut
то есть, хорошо, предназначенный для вырезания частей файла
-f 3 b сокращения
Затем необходимо превратить это в список происшествий и их количеств: можно отсортировать и использовать uniq
считать их, на выводе cut
вид | uniq-c
Наконец, Вы сделали это для всех значений в b
, но Вы только хотите тех, которые от a
. Можно использовать join
который присоединяется к двум различным файлам на общих полях (в этом случае, первое и единственное поле a
(это, кажется, делает это по умолчанию) и второе поле (2
) из b
, который является вторым файлом (-2
)
присоединитесь-2 2 result-from-b
Можно объединить это в цепочку несколькими различными способами, возможный путь использует именованные каналы от bash
замена процесса:
join -2 2 a <(cut -f 3 b | sort | uniq -c)
Это должно, по крайней мере, быть лучше, чем отдельные власти, поскольку Вы только обрабатываете b трижды (удалите другие столбцы, sort
, и uniq
) и затем я предполагаю, что соединение только считает каждый файл однажды, когда это требует, чтобы исходные данные были отсортированы. Конечно, это полагается на предположения, которые я сделал (и также необходимо отсортировать a
, но это справедливо <(sort a)
вместо a
если это не было отсортировано прежде.
Выглядит от Вашего демонстрационного входа, что Вы хотите считать каждое отличное значение в последнем поле разделенных от вкладки записей. Вот awk отрывок, который делает это.
awk -F '\t' '
{++a[$NF]}
END {for (x in a) {print x "\t" a[x]}}
' File2
Можно сделать это с некоторое время циклом
while read arg < FILE1; do echo -n -e "$arg\t"; grep "$arg" FILE2 | wc -l; done
Это считает FILE1, и для каждой строки для цикла сохранит строку в переменный $arg.
Это затем повторит $arg (-n, средства не вставляют возврат строки (\n) в конце,-e средства выполняют экс-ограниченные символы).
Затем это отобразит количество случаев, это нашло $arg в FILE2.
wc -l
и строки количества; grep
может уже считать случаи с -c
опция.
– laebshade
10.01.2013, 06:17
wc -l
в случае, если строка поиска, подобранная несколько раз на строку в FILE2.
– h3rrmiller
10.01.2013, 15:10