Как создать файлы, используя строки в TXT-файле?

Например, у меня есть файл с именем fileNames.txt. cat >fileNames возвращается

 abet able abacus в abet able abacus 

Как использовать имена файлов для создания abet, able и abacus в виде файлов .txt? Я пытался использовать трубы с кошкой и прикосновением, но я новичок в этом, поэтому я не знаю, что еще попробовать.

Существует множество способов сделать это, включая следующие (при условии GNU xargs ):

 sed -e '/^[[:space:]]*$/d' -e 's/$/.txt/' fileNames.txt | xargs -rd '\n' touch -- 

Это предполагает, что в файле fileNames.txt имеется только одно имя файла. Сценарий sed удаляет пустые строки (благодаря @rubynorails) и добавляет «.txt» в конец каждого имени файла, прежде чем xargs touch их с xargs touch .

Используя параметр -d '\n' с xargs (расширение GNU, которое указывает xargs использовать только новую xargs или '\ n' как разделитель, а не любые пробелы, и отключает обработку котировок), это даже справляется с именами файлов, которые имеют пробелы и другие потенциально проблематичные символы (кроме \n или самой новой строки). например, если строка содержит «abet able», без -d '\n' , будут созданы два файла ( able.txt и able.txt ). С его abet able.txt будет создан только один файл abet able.txt .

Вы можете использовать перенаправление ввода в цикле while с командой чтения

 while read line; do touch "${line}.txt" done < fileNames.txt 

awk 'NF>0' fileNames.txt | while read line; do touch "${line}.txt"; done

Команда awk просто избавляется от пустых строк.

Насколько я знаю, эти строки также являются буквальными, поэтому все, что находится на линии, записывается как имя файла.