Появление количества переменной в другом файле

Можно использовать оперативную функциональность sed:

sed -i -e 's/foo/bar/' myfile.txt

4
21.08.2018, 01:04
3 ответа

Принятие этого \ts являются на самом деле вкладками, и что случаи находятся на том же столбце, и что единственные соответствия 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 если это не было отсортировано прежде.

1
27.01.2020, 21:02
  • 1
    Большое спасибо! Это работало отлично! И также спасибо за подробное объяснение! –  user30012 10.01.2013, 17:25
  • 2
    @user30012, если этот ответ решил Вашу проблему, не забывает отмечать его, как принято и/или upvote он вместо того, чтобы добавить спасибо комментарий. Это - способ, которым благодарность выражена на сайтах SE. –  terdon♦ 11.02.2013, 20:13

Выглядит от Вашего демонстрационного входа, что Вы хотите считать каждое отличное значение в последнем поле разделенных от вкладки записей. Вот awk отрывок, который делает это.

awk -F '\t' '
     {++a[$NF]}
     END {for (x in a) {print x "\t" a[x]}}
' File2
0
27.01.2020, 21:02

Можно сделать это с некоторое время циклом

while read arg < FILE1; do echo -n -e "$arg\t"; grep "$arg" FILE2 | wc -l; done

Это считает FILE1, и для каждой строки для цикла сохранит строку в переменный $arg.

Это затем повторит $arg (-n, средства не вставляют возврат строки (\n) в конце,-e средства выполняют экс-ограниченные символы).

Затем это отобразит количество случаев, это нашло $arg в FILE2.

0
27.01.2020, 21:02
  • 1
    Никакая потребность передать по каналу к wc -l и строки количества; grep может уже считать случаи с -c опция. –  laebshade 10.01.2013, 06:17
  • 2
    @laebshade, Вы правы, однако, я использовал wc -l в случае, если строка поиска, подобранная несколько раз на строку в FILE2. –  h3rrmiller 10.01.2013, 15:10
  • 3
    Это скосило бы результаты. Если у Вас есть больше чем один экземпляр на строку, внезапно Ваши считаемые результаты не точны. –  laebshade 12.01.2013, 00:58

Теги

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