我想从文件中提取第n行并将其保存到新文件中。例如,我有index.txt:
cat index.txt
1 AAAGCGT
2 ACGAAGT
3 ACCTTGT
4 ATAATGT
5 AGGGTGT
6 AGCCAGT
7 AGTTCGT
8 AATGCAG
9 AAAGCGT
10 ACGAAGT
,输出应为
cat index.1.txt:
1 AAAGCGT
2 ACGAAGT
cat index.2.txt:
3 ACCTTGT
4 ATAATGT
cat index.3.txt:
5 AGGGTGT
6 AGCCAGT
等等..所以我想在循环中前两行提取表单输入文件并保存到新文件。
答案 0 :(得分:4)
它并没有准确地给出你想要的名字,但是:
split -l 2 index.txt index.
似乎是最简单的解决方案。它将创建名称以final参数开头的文件,因此将得到像' index.aa'这样的名称。和' index.bb'
答案 1 :(得分:4)
这只适用于任意数量的分组行,只需将2
更改为3
或您喜欢的任何数字:
$ awk 'NR%2==1{++i} {print > ("index." i ".txt")}' index.txt
$ ls index.?.txt
index.1.txt index.2.txt index.3.txt index.4.txt index.5.txt
$ tail index.?.txt
==> index.1.txt <==
1 AAAGCGT
2 ACGAAGT
==> index.2.txt <==
3 ACCTTGT
4 ATAATGT
==> index.3.txt <==
5 AGGGTGT
6 AGCCAGT
==> index.4.txt <==
7 AGTTCGT
8 AATGCAG
==> index.5.txt <==
9 AAAGCGT
10 ACGAAGT
答案 2 :(得分:3)
awk '{print >"index."(x+=NR%2)".txt"}' file
从1开始每两行增加x,然后将该行打印到具有该名称的文件
cat index.1.txt:
1 AAAGCGT
2 ACGAAGT
cat index.2.txt:
3 ACCTTGT
4 ATAATGT
cat index.3.txt:
5 AGGGTGT
6 AGCCAGT
在某些问题中,可能需要额外的parens,如下所示(由Ed Morton评论)
awk '{print >("index."(x+=NR%2)".txt")}' file
答案 3 :(得分:2)
我会说:
awk '{file=int((NR+1)/2)".txt"; print > file}' file
int((NR+1)/2
映射每个行号:
1 --> 1
2 --> 1
3 --> 2
x --> (x+1) / 2
所以你得到这些文件:
$ cat 1.txt
1 AAAGCGT
2 ACGAAGT
或
$ cat 3.txt
5 AGGGTGT
6 AGCCAGT