【发布时间】:2020-12-20 23:46:19
【问题描述】:
我有一个大小为 81G 的 gzip 文件,我解压后的文件大小为 254G。我想实现一个 bash 脚本,它采用 gzip 文件并根据第一列对其进行拆分。第一列的值范围在 1-10 之间。我想将文件拆分为 10 个子文件,其中第一列中值为 1 的所有行都放入 1 个文件中。第一列中值为 2 的所有行都放入第二个文件中,依此类推。当我这样做时,我不想将第 3 列和第 5 列放在新的子文件中。该文件也是制表符分隔的。例如:
col_1 col_2. col_3. col_4. col_5. col_6
1. 7464 sam. NY. 0.738. 28.9
1. 81932. Dave. NW. 0.163. 91.9
2. 162. Peter. SD. 0.7293. 673.1
3. 7193. Ooni GH. 0.746. 6391
3. 6139. Jess. GHD. 0.8364. 81937
3. 7291. Yeldish HD. 0.173. 1973
上面的文件将生成三个不同的 gzip 文件,因此 col_3 和 col_5 将从每个新的子文件中删除。我所做的是
#!/bin/bash
#SBATCH --partition normal
#SBATCH --mem-per-cpu 500G
#SBATCH --time 12:00:00
#SBATCH -c 1
awk -F, '{print > $1".csv.gz"}' file.csv.gz
但这并没有产生预期的结果。另外我不知道如何从新的子文件中删除 col_3 和 col_5。 就像我说的 gzip 文件是 81G,因此,我正在寻找一个有效的解决方案。我们将不胜感激。
【问题讨论】:
-
你的字段分隔符是什么?多个空格、一个制表符还是一个逗号?
-
@Cyrus 它说“标签分隔”。
-
标题行是真实的还是为了说明?
-
总是制表符分隔。
-
@BenjaminW。这是为了说明目的。