Use linhas em um arquivo para produzir string e nome de arquivo

5

Eu tenho um arquivo, foo.txt , que tem um nome de pasta em cada linha:

folder_1
folder_2
folder_3

E eu gostaria de fazer algo assim:

cat foo.txt | xargs -I {} echo 'function {}() { return stuff; }' > {}/function.js

Em outras palavras, eu gostaria de ler um arquivo linha por linha, depois usar cada linha para criar uma string e criar o nome do arquivo no qual a string está armazenada.

Como alguém faz algo assim a partir da linha de comando no bash?

    
por StudentsTea 28.02.2015 / 01:46

2 respostas

3

Basta fazer o loop em todas as linhas do arquivo:

while read line
do
    echo "function $line() { return stuff; }" > "$line/function.js"
done < foo.txt

Claro que isso pressupõe que você já tenha diretórios nomeados como linhas no foo.txt . Se este não for o caso, primeiro crie-os com mkdir "$line" .

Outra abordagem, com awk em vez de loop, seria:

awk '{printf("%s\n","function "$0"() { return stuff; }")>$0"/function.js"}' foo.txt
    
por 28.02.2015 / 01:53
1

Você pode fazer isso com xargs + sh -c :

<file1.txt xargs -d'\n' -L1 sh -c 'mkdir -p -- "$0"
printf %s\n "function $0() { return stuff; }" >"$0"/function.js'

não está usando a construção -I {} para evitar expansão se seu arquivo de texto contiver coisas interessantes (por exemplo, linhas como - $'\n' \ $PATH ).

    
por 04.03.2015 / 00:37