使用unix中的awk复制文件中的文件条目

时间:2011-10-21 19:40:48

标签: unix awk

我有一个文件,想要复制一些满足特定条件的条目。 例如

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 个答案:

答案 0 :(得分:1)

awk -v chr1=a -v n=3 '{ print; } substr($0,0,1) == chr1 { for (i = 0; i < n; ++i) print; }'

答案 1 :(得分:0)

这样的事情会好吗?

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

它将以chr1

开头的行打印2次

...并使用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;
    }
}

给出一个名为“conditions”的文件:

chr1 5
chr2 3

和您的示例(在不同行上使用chr1,chr2等)作为输入

它会打印chr1线6次,chr2线4次,chr3线1次

答案 2 :(得分:0)

鉴于你在berdario回答中的评论,我写道:

awk '
  NR == FNR {
    cond[$1] = $2
    next
  }
  $1 in cond {
    for (i=1; i<cond[$i]; i++) print
  }
  { print }
' conditions filename