首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文本复制到相应文件夹的相应文件中

将文本复制到相应文件夹的相应文件中
EN

Stack Overflow用户
提问于 2019-03-09 17:57:17
回答 2查看 79关注 0票数 1

在一个给定的目录中,我有9个文件夹,每个文件夹都按其编号进行标记,还有一个名为"files“的文件夹,如下所示:

代码语言:javascript
复制
ls 
1 2 3 4 5 6 7 8 9 files

1-9中的每个文件夹包含另一组文件夹1-7:

代码语言:javascript
复制
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个文件夹中的任何一个都将包含:

代码语言:javascript
复制
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命令来完成,但是如何关联要复制到正确位置的文件的所有索引呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-09 18:58:19

我不确定我是否完全理解了你的问题。但这里有一个简单的bash脚本,它应该可以完成这项工作。它使用sed功能对地址范围应用操作。

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2019-03-11 01:16:56

这可能适用于您(GNU sed和并行):

代码语言:javascript
复制
parallel sed -i -e \'26rfiles/{1}/{2}.txt\' -e \'26d\' {1}/{2} ::: {1..9} ::: {1..7}

使用parallel简化循环,使用sed将每个文件的第26行替换为files目录中同名文件的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55076103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档