我有一个包含 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}'