如何从合并文件中提取文件

时间:2014-07-07 09:48:40

标签: awk extraction

我想将合并的文件分成两个文件。文件:

file.dat

i =100
1 2 3
i =1
-1 -2 -3
i =101
1 2 3
i =102
1 2 3
i =103
1 2 3
i =2
-1 -2 -3 
....

混合指数是

1,2,3,4, ...,99 

100, 101, 102, 103,...,200.

指数交替出现,但没有规则。 数据

1 2 3 

-1 -2 -3 

仅表示每个步骤中的数据块。

你能否提出将合并文件分成两个与索引有关的文件的想法?

2 个答案:

答案 0 :(得分:1)

如果您只想将数据块附加到两个不同的文件中,具体取决于它所属的索引组,这应该有效:

# separate.awk

{
  if ($1 == "i")
  {
    split($2,a,"=");
    i = a[2];
  }

  if (i < 100)
    print > "1-99.dat";
  else
    print > "100-200.dat"
}

$ awk -f separate.awk file.dat

$ cat 1-99.dat
i =1
-1 -2 -3
i =2
-1 -2 -3 

$ cat 100-200.dat
i =100
1 2 3
i =101
1 2 3
i =102
1 2 3
i =103
1 2 3

答案 1 :(得分:1)

awk应该为您完成:

awk -F= '/=/{f="a.txt";if($2>99)f="b.txt";next} {print >f}' file.dat

首先,它将字段分隔符设置为=。然后它检查该行是否包含等号,如果是,则是时候将输出文件的名称设置为“a.txt”或“b.txt”,具体取决于等号后面的数字。然后在后续记录中,我们只写入我们上次选择的文件。