Сценарий для генерации списка URL из списка авторов

Я должен взять список имен авторов, из которых может состоять из 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? Или возможно существуют более легкие пути с другими командами?

0
задан 2 December 2019 в 18:58

4 ответа

Я предложил бы 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
0
ответ дан 21 December 2019 в 23:44

После тестирования Вашей команды я получил этот результат:

"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 управляйте, потому что это не потребность в Вашем ожидаемом выводе

2
ответ дан 21 December 2019 в 23:44

Можно просто использовать sed, три раза:

  • Первый 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
0
ответ дан 21 December 2019 в 23:44

Попробуйте это:

input="/path/to/list.txt"
while IFS= read -r line
do
  echo "http://site.com/${$line// /+}" > urls.txt
done < "$input"
0
ответ дан 21 December 2019 в 23:44

Другие вопросы по тегам:

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