文件的每一行都会转换为新文件

文件的每一行都会转换为新文件

我有一个包含 4 列和 5000 行的文件。我想从此文件创建 5000 个新文件,以便每个文件都有原始文件中的一行。另外,我想根据第四列中的值命名新文件。示例:以下文件 (XXXX.txt) 有四行

文件:XXXX.txt

1 315 4567 G1
1 212 345 G2
2 315 25674 G3
3 12 235673 G4

预期新文件

文件:G1

1 315 4567 G1

文件:G2

1 212 345 G2

文件:G3

2 315 25674 G3

文件:G4

3 12 235673 G4

我尝试过这个命令:

awk '{print > $0}' < XXXX.txt

此命令根据需要创建新文件,但我无法根据原始文件的第 4 列命名新文件。

答案1

您可以尝试稍微更改一下awk脚本:

awk '{print > $4}' XXXX.txt

但请注意,如果源文件中存在与其他行具有相同第四列的行,则最终文件将仅包含最后一行。您可以尝试类似的方法来避免它:

awk '{print >> $4}' XXXX.txt

注意:不要运行多次,因为这会添加记录两次。

如果您最终收到“打开文件过多”错误,您可以使用这样的脚本来显式关闭输出文件

awk '{print >> $4;close($4)}' XXXX.txt

答案2

你有点接近。 awk '{print > $0}'相当于awk '{print $0 > $0}',更容易理解。

如果您将一行打印到所需的第四列($4)而不是整行($0)调用的文件中,那么它将是正确的。

awk '{print $0 > $4}'

相关内容