在给定目录中,我有9个文件夹,每个文件夹都标有其编号,以及一个名为“files”的文件夹,这样:
LS1 2 3 4 5 6 7 8 9个文件1-9中的每个文件夹都包含另一组…
不确定我是否完全理解你的问题。但是这里有一个简单的bash脚本可以完成这项工作。它使用了 sed 能够在地址范围上应用操作。
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
这可能适合你(GNU sed&amp; parallel):
parallel sed -i -e \'26rfiles/{1}/{2}.txt\' -e \'26d\' {1}/{2} ::: {1..9} ::: {1..7}
使用parallel来简化循环和sed,用filesod目录中的同名内容替换每个文件的第26行。