Linux 中 awk依据某一列来拆分数据
001、直接拆分
[root@PC1 test2]# ls outcome.map [root@PC1 test2]# cat outcome.map ## 准备一个测试文件,依据第一列来拆分文件 1 snp1 0 55910 1 snp2 0 85204 1 snp3 0 122948 2 snp4 0 167127 2 snp5 0 176079 2 snp6 0 361433 3 snp7 0 144010 3 snp8 0 199910 3 snp9 0 234281 4 snp10 0 236366 4 snp11 0 257944 4 snp12 0 281182 5 snp13 0 93955 5 snp14 0 184537 5 snp15 0 204629 [root@PC1 test2]# awk '{print > $1}' outcome.map ## 拆分 [root@PC1 test2]# ls ## 查看拆分效果 1 2 3 4 5 outcome.map [root@PC1 test2]# cat 1 1 snp1 0 55910 1 snp2 0 85204 1 snp3 0 122948 [root@PC1 test2]# cat 3 3 snp7 0 144010 3 snp8 0 199910 3 snp9 0 234281 [root@PC1 test2]# cat 5 5 snp13 0 93955 5 snp14 0 184537 5 snp15 0 204629
002、拆分并重命名
[root@PC1 test2]# ls outcome.map [root@PC1 test2]# cat outcome.map ## 测试文件 1 snp1 0 55910 1 snp2 0 85204 1 snp3 0 122948 2 snp4 0 167127 2 snp5 0 176079 2 snp6 0 361433 3 snp7 0 144010 3 snp8 0 199910 3 snp9 0 234281 4 snp10 0 236366 4 snp11 0 257944 4 snp12 0 281182 5 snp13 0 93955 5 snp14 0 184537 5 snp15 0 204629 [root@PC1 test2]# awk '{print > "test"$1".txt"}' outcome.map ## 拆分并重命名 [root@PC1 test2]# ls outcome.map test1.txt test2.txt test3.txt test4.txt test5.txt [root@PC1 test2]# cat test2.txt 2 snp4 0 167127 2 snp5 0 176079 2 snp6 0 361433
003、 > 在awk内部相当于追加重定向
[root@PC1 test2]# ls outcome.map [root@PC1 test2]# cat outcome.map ## 测试文件 1 snp1 0 55910 5 snp2 0 85204 5 snp3 0 122948 2 snp4 0 167127 2 snp5 0 176079 2 snp6 0 361433 3 snp7 0 144010 3 snp8 0 199910 3 snp9 0 234281 4 snp10 0 236366 4 snp11 0 257944 4 snp12 0 281182 5 snp13 0 93955 5 snp14 0 184537 5 snp15 0 204629 [root@PC1 test2]# awk '{print > $1}' outcome.map ## 5 中间经过2、3、4; 可以观察到 > 的作用并非是清空重定向,而是追加重定向 [root@PC1 test2]# ls 1 2 3 4 5 outcome.map [root@PC1 test2]# cat 1 1 snp1 0 55910 [root@PC1 test2]# cat 5 5 snp2 0 85204 5 snp3 0 122948 5 snp13 0 93955 5 snp14 0 184537 5 snp15 0 204629
。