Я нахожусь в терминале OS X и пытаюсь сделать следующее:

У меня есть файл .txt со строками текста. Я хочу, чтобы каждая строка стала файлом.

Это мне удалось сделать: cat file.txt | XARGS Touch

Это создает мой список файлов, но мне нужно, чтобы они содержали какое-то содержимое, а не пустые.

Может кто-нибудь помочь мне с командой, которая производит файлы из списка с одной строкой текста внутри каждого файла?

Так же, как команда echo «Привет, мир». > foo.txt создает текст в foo.txt, но с моим сценарием, как описано. Является ли это возможным?

Заранее спасибо!

/ Никлас

1 ответ1

1

1. Простой подход:

echo 'Hello, world.' > foo.txt
< file.txt xargs -L 1 cp foo.txt
rm foo.txt

Команда cat сильно перегружена; когда вы видите cat filename | command , вы можете изменить его на command < filename или, что эквивалентно, filename command .  Опция -L 1 для xargs говорит ему о необходимости читать только одну строку из file.txt за раз; поэтому, если file.txt содержит file1 и file2 (в отдельных строках), xargs будет запущен

cp foo.txt file1
cp foo.txt file2

Я полагаю, остальное не требует пояснений.  Если вы хотите поместить все это в одну строку, просто объедините строки с &&:

echo 'Hello, world.' > foo.txt  &&  xargs -L 1 cp foo.txt < file.txt  &&  rm foo.txt

Я переместил < file.txt в конец команды xargs , куда люди обычно ее помещают.

2. Более гибкий

Вы, вероятно, захотите сделать что-то более сложное и сложное, чем записать одну и ту же строку в каждый файл.  Эта команда:

xargs sh -c 'for f do echo "Hello, world." > "$f"; done' sh < file.txt

передает имена файлов в качестве вызова оболочки sh который затем может сделать что - нибудь к имени файла (ссылка как "$f" , что вы могли бы сделать из командной строки.  И, очевидно, с этим методом вам не нужно создавать и удалять временный файл.

3. Без использования xargs

Вы можете упростить вышеизложенное до

while IFS= read -r f
do
    echo 'Hello, world.' > "$f"
done < file.txt

который по сути совпадает с предыдущим ответом, за исключением того, что на этот раз оболочка читает файл file.txt , поэтому вам не нужны xargs .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .