我有 4 个 txt 文件,其中包含有序文件名集合
例如
文件 L001 包含 file1_L001 file2_L001 file3_L001 .. 等等(48 个文件),每个文件位于一个新通道中
文件L002包含file1_L002 file2_L002 file3_L002 ..依此类推(还有48个文件)
文件L003包含file1_L003 file2_L003 file3_L003 ..依此类推(还有48个文件)
文件 L004 包含 file1_L004 file2_L004 file3_L004 .. 以及最多 48 个文件名
我想要的是连接,使用 bash 创建新文件,类似
cat file1_L001 file1_L002 file1_L003 file1_L004 > All_file1.file
cat file2_L001 file2_L002 file2_L003 file2_L004 > All_file2.file
...
cat file48_L001 file48_L002 file48_L003 file48_L004 > All_file48.file
也就是说,对 file2_L001 file2_L002 file2_L003 file2_L004 等重复相同的过程,直到 file48
我的问题是我不知道如何调用特定文件以便包含到名称文件中。我可以使用 cat 命令获取这些名称,但我不知道如何选择要应用的这些文件中的一个,例如一系列嵌套的 for
假设:
L00?
文件中的名称处理文件L00?
文件中列出的相同顺序处理文件L00?
文件中的文件名使用一对
for/while
循环的一个想法:
rm -rf All_file*.file
for ((i=1;i<=4;i++))
do
while read -r fname
do
pfx="${fname%_*}"
cat "${fname}" >> "All_${pfx}.file"
done < L00${i}
done
如果我们知道所有第一行文件名都将被放在一起,那么所有第二行文件名等等......
使用
paste
命令来匹配关联文件,例如:
$ paste L001 L002 L003 L004 | head -3
file1_L001 file1_L002 file1_L003 file1_L004
file2_L001 file2_L002 file2_L003 file2_L004
file3_L001 file3_L002 file3_L003 file3_L004
然后我们可以将其输入到单个
while
循环中,例如:
rm -rf All_file*.file
while read -r flist
do
read -r f1 _ <<< "${flist}"
pfx="${f1%_*}"
cat "${flist}" >> "All_${pfx}.file"
done < <(paste L001 L002 L003 L004)
第二种方法将会更加高效,因为我们将 172 (4x48)
cat / >>
操作减少到 48 cat / >>
操作。