Как создать несколько имен файлов из list.txt в bash?

Вы можете попытаться отправить SIGUSR1 процессу, чтобы сервер tmux воссоздал сокет

pkill -USR1 tmux

Источник

3
24.01.2020, 10:46
5 ответов

Вы можете попробовать что-то вроде :for i in $(cat list.txt); do touch $i; done

0
27.01.2020, 21:11

Использование параллелизма GNU в скрипте:

#!/bin/bash

constant=constant

populate_file () {
    local const=$1
    local file=$(basename -s '.M0.ctl' "$2")
    printf '%s\n%s\n%s\n' \
    "seqfile = ${file}_p.phy" \
    "treefile = ${const}.txt" \
    "outfile = ${file}_M0_mlc" > "$2"
}

export -f populate_file

parallel populate_file "$constant" {}.M0.ctl :::: list.txt

Это будет читать строки из list.txtи выполнять функцию populate_fileдля каждой из них параллельно. Функция populate_fileвыводит три строки в нужном формате в каждый файл.

При отсутствии параллелизма GNU вы можете использовать цикл чтения while:

#!/bin/bash

constant=constant

populate_file () {
    local const=$1
    local file=$(basename -s '.M0.ctl' "$2")
    printf '%s\n%s\n%s\n' \
    "seqfile = ${file}_p.phy" \
    "treefile = ${const}.txt" \
    "outfile = ${file}_M0_mlc" > "$2"
}

while IFS= read -r file; do
    populate_file "$constant" "${file/ /}.M0.ctl"
done < list.txt
3
27.01.2020, 21:11

Простейший:

xargs touch <List.txt

Волшебство в том, что xargsберет каждую строку из своего стандартного ввода и добавляет ее в качестве аргумента команды.

5
27.01.2020, 21:11

Другой способ

tr -s '[:blank:]' '[\n*]' < list.txt | 
  while IFS= read -r word; do
   touch "$word";
  done

Этот ответ был предоставлен с предположением, что все «слова» в файле находятся в одной и той же (первой )строке и разделены пробелами.

0
27.01.2020, 21:11
#!/bin/bash

tr -d '[:blank:]' < list.txt > outputFile.tmp

for i in $(cat outputFile.tmp)
do
  echo "seqfile = ${i}_p.phy" >> ${i}_M0.ctl
  echo "treefile = constant.txt" >> ${i}_M0.ctl
  echo "outfile = ${i}_M0_mlc" >> ${i}_M0.ctl
done
exit 0

Пояснение:

  1. tr -d '[:blank:]' < list.txt > outputFile.tmpудалит пробелы из списка и скопирует его вoutputFile.tmp
  2. Цикл
  3. forсчитывает все строки из outputFile.tmpи добавляет в файлы необходимый контекст, создавая их на лету.
0
27.01.2020, 21:11

Теги

Похожие вопросы