我需要你的帮助才能从file1获取以下结果文件,file1非常庞大,我希望根据第一列(字段1)提取文件中的每个部分。提前谢谢。
文件1:
1111 3 4 5 7
1111 2 4 6 8
1111 1 5 9 3
1112 4 6 8 9
1112 6 8 7 7
1113 6 6 6 6
1113 7 7 7 7
......
结果
我们根据第一个字段获取所有文件,在简要文件中结果应为3个文件(file_1111,file_1112和file_1113),如下所示:
的 file_1111
1111 3 4 5 7
1111 2 4 6 8
1111 1 5 9 3
file_1112
1112 4 6 8 9
1112 6 8 7 7
file_1113
1113 6 6 6 6
1113 7 7 7 7
最好的问候,
H.R
答案 0 :(得分:2)
试试这个测试版本:
awk '{print>>"file_" $1;}' File_1
默认情况下,awk
会拆分字段$1
$2
等中包含空格的行。
此单行命令将每行与当前行的第一个字段$1
相关联。
测试:
$ cat File_1
1111 3 4 5 7
1111 2 4 6 8
1111 1 5 9 3
1112 4 6 8 9
1112 6 8 7 7
1113 6 6 6 6
1113 7 7 7 7
$ awk '{print>>"file_" $1;}' File_1
$ ls
File_1 file_1111 file_1112 file_1113
$ cat file_1111
1111 3 4 5 7
1111 2 4 6 8
1111 1 5 9 3
$ cat file_1112
1112 4 6 8 9
1112 6 8 7 7
$ cat file_1113
1113 6 6 6 6
1113 7 7 7 7
纯bash脚本可能会在循环中运行许多进程,我相信它应该比一个awk
命令慢。
- 已编辑 - File_1是否排序无关紧要。它会起作用。
答案 1 :(得分:1)
如果数据按照显示方式排序,那么shell可以很好地完成。
while read FileField DataFields || [ "$FileField" ] ;do
echo "$FileField $DataFields" >> "file_$FileField"
done < "$yourInputFile"
如果数据未按所示排序,则对于大型数据集,awk答案可能会更快。
...虽然文件字段在新文件中似乎毫无意义。你可能会逃脱echo "$DataFields" >> "file_$FileField"