使用shell命令将一个文件分成多个文件

使用shell命令将一个文件分成多个文件

我想将我的文件分成几个文件。

下面是我拥有的文件。

sort a # 3|4
sort a # 2|5
sort b # 1|2
sort b # 2|5

我想将文件分成以下几部分

文件1

sort a # 3|4
sort a # 2|5

文件2

sort b # 1|2
sort b # 2|5

正如你所看到的,我根据第二列对它们进行了划分。由于第二列有许多不同的值,因此需要花费大量时间以费力的方式划分文件。这个问题如何实现呢?

答案1

AWK解决方案:

awk '!a[$2]++{ fn="file"++c }{ print > fn }' inputfile
  • !a[$2]++- 检查是否遇到唯一的第二个字段值,$2利用它作为数组的索引a。仅在唯一值第一次出现时!a[$2]++评估条件true$2
  • fn="file"++c- 生成文件名带递增后缀++c

查看结果:

$ head file[12]
==> file1 <==
sort a # 3|4
sort a # 2|5

==> file2 <==
sort b # 1|2
sort b # 2|5

答案2

split -l 2 test

这将生成 2 个分割文件。分割文件的输出:

$ cat xaa
sort a # 3|4
sort a # 2|5
$ cat xab
sort b # 1|2
sort b # 2|5

相关内容