Я должен взять список имен авторов, из которых может состоять из 1 до 4 слов как это
Osho
Hartmann Nicolai
Bird Robert Montgomery
Coates Ta-Nehisi
и генерируйте URL как это
site.com/word1+word+word3+word4
Если я делаю это как это
< list.txt xargs -l | xargs printf '"site.com/%s\n' > url.txt
это примет одно слово. Мой вопрос состоит в том, как я добавляю еще 3 дополнительных параметра как %s
? Или возможно существуют более легкие пути с другими командами?
Я предложил бы awk для задач обработки текста как это:
$ awk -v site="site.com" -vOFS=+ '{$1=$1; print site "/" $0}' list.txt
site.com/Osho
site.com/Hartmann+Nicolai
site.com/Bird+Robert+Montgomery
site.com/Coates+Ta-Nehisi
После тестирования Вашей команды я получил этот результат:
"site.com/Osho
"site.com/Hartmann
"site.com/Nicolai
"site.com/Bird
"site.com/Robert
"site.com/Montgomery
"site.com/Coates
"site.com/Ta-Nehisi
Как я вижу, Вы хотите заменить каждое пространство a +
, таким образом, можно использовать sed
управляйте как этот:
< list.txt xargs -l | sed "s/\ /+/g" | xargs printf 'site.com/%s\n' > url.txt
Вот результат:
site.com/Osho
site.com/Hartmann+Nicolai
site.com/Bird+Robert+Montgomery
site.com/Coates+Ta-Nehisi
Эта команда является действительно эффективной и динамичной, Вы можете иметь действительно длинное составленное имя (с 6, 10 или больше частей), только расположить с интервалами, исчез бы, каждый -
символ даже не будет, изменяют
NB: я просто удалил "
символ в Вашем printf
управляйте, потому что это не потребность в Вашем ожидаемом выводе
Можно просто использовать sed
, три раза:
+
символыsite.com/
Таким образом, выражение могло быть
cat input.txt | sed -e "s/^[ \t]*//;s/[ \t]*$//" | sed -e "s/\s+/+/g" | sed -e "s/\(.*\)/site.com\\/\1/"
Вывод
site.com/Osho
site.com/Hartmann+Nicolai
site.com/Bird+Robert+Montgomery
site.com/Coates+Ta-Nehisi
Попробуйте это:
input="/path/to/list.txt"
while IFS= read -r line
do
echo "http://site.com/${$line// /+}" > urls.txt
done < "$input"