скопировать записи файла в файле с помощью awk в unix - PullRequest
1 голос
/ 21 октября 2011

У меня есть файл, и я хотел бы скопировать некоторые записи, которые удовлетворяют определенным условиям. Например

myfile
chr1 a b c
chr2 a b c
chr3 x y z

Я хотел бы скопировать строки, первый столбец которых начинается с chr1, и я хочу скопировать их n раз.

myfile
chr1 a b c
chr1 a b c
chr1 a b c
chr2 a b c
chr3 x y z

Ответы [ 3 ]

1 голос
/ 21 октября 2011
awk -v chr1=a -v n=3 '{ print; } substr($0,0,1) == chr1 { for (i = 0; i < n; ++i) print; }'
0 голосов
/ 22 октября 2011

Учитывая ваши комментарии в ответе бердарио, я бы написал:

awk '
  NR == FNR {
    cond[$1] = $2
    next
  }
  $1 in cond {
    for (i=1; i<cond[$i]; i++) print
  }
  { print }
' conditions filename
0 голосов
/ 21 октября 2011

Что-то вроде этого было бы хорошо?

awk '{if ($1 == "chr1"){print; print;} print;}'

Он напечатает еще 2 раза строки, которые начинаются с chr1

... и сцикл for:

awk '{if ($1 == "chr1"){ for(i=1;i<=2;i++){ print; } } print;}'

хорошо, это должно быть

#!/usr/bin/awk -f

BEGIN{
    while ((getline < "conditions") > 0){
        cond[$1] = $2
    }
}
{
    print;
    for (i=0; i<cond[$1]; ++i){
        print;
    }
}

, если файл с именем "condition" выглядит так:

chr1 5
chr2 3

и ваш пример (с chr1, chr2 и т. Д. В разных строках) в качестве ввода

он будет печатать строку chr1 6 раз, строку chr2 4 раза и строку chr3 1 раз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...