将文件按行拆分到 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 中的特定子文件夹中的主要内容,如果未能解决你的问题,请参考以下文章