根据第一列值将文件拆分为多个文件

Zzr*_*rot 17 awk text-processing

我已经看到了在模式匹配和行匹配方面拆分文件的解决方案,但我想要的是以下内容。情况是,假设我有一个文件file1 -

A.B|100|20
A.B|101|20
A.X|101|30
A.X|1000|20
B.Y|1|1
Run Code Online (Sandbox Code Playgroud)

现在我想根据第一列将此文件拆分为 3 个不同的文件,其中第一个文件将是A.B第一列中包含的所有行,第二个文件应包含所有行,A.X依此类推。

如果第一列有任何变化,应该为这些行创建一个新文件。有没有办法用bash 或来做awk

由于无法事先知道第一列的值是什么,因此我无法使用任何功能,例如splitcut。我在这里先向您的帮助表示感谢!

Joh*_*024 40

尝试:

awk -F\| '{print>$1}' file1
Run Code Online (Sandbox Code Playgroud)

这会将每一行写入以第一列命名的文件。

这个怎么运作:

  • -F\|将字段分隔符设置为|.

  • print>$1 将当前行打印到名称为第一个字段的文件中。

  • @user3768495`awk -F\| '{print>"subfolder/"$1}' file1` (6认同)
  • (让我感到惊讶的是,第一个字段的第二次出现不会打开文件的新实例并覆盖前一个。也就是说,“>>”不是必需的。...一直使用 shell 太久了,我猜) (2认同)
  • @Theophrastus 那将是 _shell_ 行为。awk 是不同的。使用 awk,`>` 将覆盖 _previously_ 现有文件,但是,这与 shell 不同,当 awk 命令正在运行时,`>` _appends_。 (2认同)