【问题标题】:Linux - script to copy a line from one file to multiple other filesLinux - 将一行从一个文件复制到多个其他文件的脚本
【发布时间】:2020-05-03 23:57:05
【问题描述】:

我被这个任务困住了:

我有一个文本文件 1.txt,其中每行有 1 个变量。我有一个文本文件 2.txt,我想用 1.txt 的变量替换第 3 行,并将其保存在与变量同名的目录下。我的想法是这样的:

!/bin/bash

for i in `cat 1.txt`;
do awk '{ if (NR == 3) print $i; else print $0}' 2.txt > "/$i/2.txt";
done

最后一部分有效,我将文件放在预期的文件夹中。但它始终是刚刚复制的同一个文件,没有修改。

任何帮助表示赞赏

编辑:为了更清楚,我的 1.txt。包含如下数据:

variable1
variable2
variable3

各占一行。

我现在想编辑一个文件 2.txt,在第 3 行插入 variable1 并将其保存到 /variable1/2.txt 然后再次打开文件 2.txt,在第 3 行插入 variable2 并将其保存到 /variable2/2.txt 等等……

希望它更清楚;)

【问题讨论】:

  • 如果您可以发布一个示例输入和输出,以帮助人们帮助您。

标签: linux bash shell scripting


【解决方案1】:

不确定我是否完全按照您的操作,但以下代码是执行您描述的一种方法:

#!/bin/bash

while IFS= read -r variable; do
    mkdir "$variable"
    echo -e "\n\n$variable" > "${variable}/2.txt"
done < 1.txt

输出是:

$ cat variable?/2.txt 


variable1


variable2


variable3

编辑:在阅读@Jetchisel 对解决方案的评论后,使用 vims ex 命令的类似解决方案是:

#!/bin/bash

while IFS= read -r variable; do
    ex "+normal! 2G" "+normal o${variable}" "+wq" "${variable}/2.txt"
done < 1.txt

【讨论】:

    【解决方案2】:

    我是这样理解你的问题的。

    while IFS= read -r lines; do
      [[ ! -d "/$lines" ]] && { mkdir -p "/$lines" || exit; }
      printf '%s\n' '3c' "$lines" . ,p Q | ed -s 2.txt > "/$lines/2.txt"
    done < 1.txt
    

    【讨论】:

      猜你喜欢
      • 2020-06-18
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多