我想将合并的文件分成两个文件。文件:
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
仅表示每个步骤中的数据块。
你能否提出将合并文件分成两个与索引有关的文件的想法?
答案 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”,具体取决于等号后面的数字。然后在后续记录中,我们只写入我们上次选择的文件。