У меня много текстовых файлов, названных случайным образом (что-то вроде 70000 файлов);все, что я знаю, это то, что где-то в первых 30 строках есть две строки формата Author: Samuel Richardson
и еще одна строка Title: Clarissa, Volume 5 (of 9)
.Я не уверен в случае этих двух строк.
Я хочу извлечь заголовок и автора и соответственно переименовать файл, что-то вроде "Clarissa, Volume 5 (of 9) ,___, Samuel Richardson.txt"
(я использую ,___,
, чтобы были допустимые разделителимежду автором и заголовками.
Мой код:
for filename in *.txt; do
title=$(head -n 30 $filename.txt | grep -i 'Title:' | sed -n 's/^.*Title: //p')
author=$(head -n 30 $filename.txt | grep -i 'Author:' | sed -n 's/^.*Author: //p')
new_name="$title ,___, $author"
mv $filename $new_name.txt
done
Он не работает должным образом. Подкод
echo "title: $title _"
echo "author: $author _"
new_name="$title ,___, $author"
echo $new_name
выводит на печать следующий вывод
_tle: Clarissa, Volume 5 (of 9)
_thor: Samuel Richardson
,___, Samuel Richardson)
Более того, я не знаю, как сохранить вычисление извлечения первых 30 строк с помощью команды head
в переменную firstlines
, чтобы его не пришлось пересчитывать.
Код
firstlines=$(head -n 30 randomname.txt)
и использование title=$($firstlines | grep -i 'Title:' | sed -n 's/^.*Title: //p')
выводит ошибку command not found
.