Я пытаюсь написать однострочную команду для создания 20 пустых файлов с именами, извлеченными из файла .txt в другой папке с тем же расширением txt.
Я пытался
for i in $(cat test.txt); do grep -w $i | touch $i.txt ; done
и
cat test.txt| while read line ; do grep $line ; touch $line.txt ; done
, а также
for filename in $(cat testfile.txt) ; do touch head -20 $filename.txt; done
Это не работает. Я не знаю, как указать 10 первых слов файла test.txt.
Это работает на Вас?
while IFS= read -r i; do
touch "$i".txt
done < <(head -20 filename.txt)
Станьте первыми 20 слов.
Используя сокращение:
$ for i in $(cut -d ' ' -f1-20 a.txt); do touch $i.txt; done
(с mapfile):
$ mapfile -d ' ' -n 20 -t < a.txt; touch ${MAPFILE[@]/%/.txt}
(с awk):
$ awk '{for (i=1; i<=20; i++) {system("touch "$i".txt")}}' a.txt
(с расширением параметра оболочки):
$ a=($(<a.txt)); a=(${a[@]/%/.txt}); touch ${a[@]:0:19}
xargs
команда имеет --arg-file
флаг, который позволяет использовать аргументы в пользу команды, которую Вы намереваетесь выполнить из файла. Таким образом можно сделать
xargs --arg-file=filenames.txt touch
Если Вы хотите сначала 20 строк
head -n20 filenames.txt | xargs touch
Замена tail
вместо head
для последних 20 строк из файла