在一个给定的目录中,我有9个文件夹,每个文件夹都按其编号进行标记,还有一个名为"files“的文件夹,如下所示:
ls
1 2 3 4 5 6 7 8 9 files1-9中的每个文件夹包含另一组文件夹1-7:
cd 1/
ls
1 2 3 4 5 6 7 并且1-7中的每个文件夹都有一个输入文件,其名称取决于目录,使得(例如)文件夹8中的文件夹3的输入文件称为"8-3.inp",而文件夹1中的文件夹2的输入文件为"1-2.inp“。
在"files“文件夹中,我还有9个类似标记为1-9的文件夹。在这9个文件夹中的每个文件夹中,我都有7个文本文件,因此这9个文件夹中的任何一个都将包含:
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt我想将txt文件的所有内容粘贴到相应输入文件夹的第26行。例如,我希望将/files/8/2.inp的所有文本内容复制到/8/2/8-2.inp的第26行
有没有办法做到这一点?我认为这可以使用sed命令来完成,但是如何关联要复制到正确位置的文件的所有索引呢?
发布于 2019-03-09 18:58:19
我不确定我是否完全理解了你的问题。但这里有一个简单的bash脚本,它应该可以完成这项工作。它使用sed功能对地址范围应用操作。
tmpfile=tmpfile
for i in $(seq 1 9)
do
for j in $(seq 1 7)
do
ifile2=$i/$j/$i-$j.inp
# ofile is identical to ifile2. Give ofile it a different extension for testing
ofile=$i/$j/$i-$j.inp
ifile=files/$i/$j.inp
# copy lines 1-25 to tempfile
# -n option suppresses normal sed output,
# on selected range (1,25) print lines (p)
sed -n '1,25p' <$ifile2 > $tmpfile;
# append input file to tempfile
cat $ifile >> $tmpfile
# append files 27-end to tempfile.
# just ask sed to delete lines 1-26 and to print others (default sed behavior)
# note line 26 is suppressed
sed '1,26d' <$ifile2 >> $tmpfile
# move tempfile to result file
mv $tmpfile $ofile
done
done发布于 2019-03-11 01:16:56
这可能适用于您(GNU sed和并行):
parallel sed -i -e \'26rfiles/{1}/{2}.txt\' -e \'26d\' {1}/{2} ::: {1..9} ::: {1..7}使用parallel简化循环,使用sed将每个文件的第26行替换为files目录中同名文件的内容。
https://stackoverflow.com/questions/55076103
复制相似问题