Linux - скрипт для копирования строки из одного файла в несколько других файлов - PullRequest
0 голосов
/ 04 мая 2020

Я застрял с этой задачей:

У меня есть текстовый файл 1.txt, где в каждой строке есть 1 переменная. У меня есть текстовый файл 2.txt, где я хочу заменить строку 3 переменной 1.txt и сохранить ее в каталоге, имя которого совпадает с именем переменной. Моя идея заключалась в следующем:

!/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, вставить переменную1 в строку 3 и сохранить его в /variable1/2.txt затем снова откройте файл 2.txt, вставьте переменную 2 в строку 3 и сохраните его в /variable2/2.txt и т. д. ...

надеюсь, это сделает его более понятным;)

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Не уверен, что я вполне понимаю, что вы делаете, но следующий код - один из способов сделать то, что вы описываете:

#!/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
0 голосов
/ 04 мая 2020

Вот как я понял твой вопрос.

while read -r lines; do
  out=$(printf '%s\n' '3c' "$lines" . ,p Q | ed -s file2.txt)
  printf '%s\n' "$out" > "/$lines/2.txt"
done <file1.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...