将文件按行拆分到 bash 中的特定子文件夹中

Posted

技术标签:

【中文标题】将文件按行拆分到 bash 中的特定子文件夹中【英文标题】:Split a file by lines into specific subfolders in bash 【发布时间】:2021-06-02 23:55:36 【问题描述】:

我有一个包含五行的文本文件parent.txt

line 1
line 2
line 3
line 4
line 5

我想将该文件拆分为名为 child1...child5 的单独文件,为此我可以使用 split 这样的命令

spit -l 1 -d parent.txt child

但是,我希望每个新创建的文件都位于具有相同名称的文件夹中(例如,文件 child1 将位于文件夹 child1 中),但我不知道该怎么做。

暂时,我是这样写的:

n=`cat parent.txt | wc -l`;
for i in `seq 1 $n`;
do
    mkdir -p $(printf "child%04i" $i);
    cd $(printf "child%04i" $i);
    split -l 1 -a 4 --numeric-suffixes=1 parent.txt child
    cd ..
done

但它会输出每个文件夹中的每个子文件,这不是我需要的。

【问题讨论】:

【参考方案1】:

我不知道该怎么做。

仅针对每一行,创建一个名为child + 行号的目录,然后将该行打印到正确的文件中。

在 awk 中:

awk 'system("mkdir child"NR); print > "child"NR"/child"NR' parent.txt

在 bash 中会慢 1000 倍:

nr=1
while IFS= read -r line; do
   mkdir "child$nr"
   printf "%s\n" "$line" > "child$nr/child$nr"
   nr=$((nr + 1))
done < parent.txt

【讨论】:

以上是关于将文件按行拆分到 bash 中的特定子文件夹中的主要内容,如果未能解决你的问题,请参考以下文章

在 GCP 中按行拆分大文件

如何从 bash 脚本将消息记录到特定路径中的日志文件

按行数拆分大型excel文件

将文件名中具有特定字符串的目录中的所有文件复制到Bash中的不同目录[关闭]

使用 Python 将内容从单个文件夹拆分到多个子文件夹

Bash - 将文件合并到单独的子文件夹中