Хороший день, я должен собрать историю просмотра определенных людей каждый месяц, и я - общий новичок Linux. Я хотел бы во-первых sort
веб-сайты затем выполненный a uniq -u
. Вывод программа, которую я использую, похож на это -
==================================================
URL : http://example.com/
==================================================
==================================================
URL : http://example.com/en
==================================================
==================================================
Существует приблизительно 30 из них в папке /history
названный, например, bob.txt
, tim.txt
и т.д. Действительно ли возможно сделать сценарий, который сортирует содержание во всех файлах в каталоге, удаляет весь =
знаки, удаляет дубликаты и сохраняет результат в новом файле, например, bob.doc
, tim.doc
?
В данный момент я вручную работаю sort bob.txt | uniq -u > bob.doc
Это работает, по крайней мере, для примера, который Вы дали:
for i in *.txt; do
sed '/=/d;s/URL *: //' "$i" |
sort -u > "${i%%.txt}".doc
done
for i in *.txt; do … done
– цикл по каждому .txt
файл в текущем каталогеsed '/=/d;s/URL *: //'
– удалите каждое начало строки =
, удалите материал перед URL в каждой строке sort -u
– вид и вывод только первое из равного выполнения> "${i%%.txt}".doc
– перенаправьте вывод к, например. bob.doc
для входного файла bob.txt
(использование расширения Параметра)GNU awk
(значение по умолчанию в Ubuntu) - один:
awk -vFPAT='https?:[^\\s]+' 'BEGIN {PROCINFO["sorted_in"]="@ind_str_asc"} \
/\w+/{a[$1]} END{for(i in a) print i}' *.txt
Принятие всех входных файлов заканчивается в .txt
; в противном случае внесите необходимые изменения в шаблоне шарика *.txt
Переменная FPAT
устанавливает использование определения поля Regex, мы определили часть записей, запускающихся с http
с дополнительным s
после этого, сопровождаемый :
, до следующего пробела как поле шаблоном Regex https?:[^\\s]+'
awk
только ассоциативные массивы поддержек, которые не отсортированы по умолчанию (хорошо, отсортированный согласно внутреннему хешу - это - деталь реализации), мы определяем порядок сортировки массива a
согласно индексным строкам с помощью ассоциативного массива PROCINFO
с ключом sorted_in
наличие значения @ind_str_asc
PROCINFO["sorted_in"]="@ind_str_asc"
. Если Вы хотите упорядочение по убыванию, использовать PROCINFO["sorted_in"]="@ind_str_desc"
Наконец, END{for(i in a) print i}
выполняет итерации по элементам массива a
и печатает ключи сортированного массива.
Если Вы хотите сохранить вывод в файл, например. out.txt
:
awk -vFPAT='https?:[^\\s]+' 'BEGIN {PROCINFO["sorted_in"]="@ind_str_asc"} \
/\w+/{a[$1]} END{for(i in a) print i}' *.txt >out.txt
Править:
Если Вы хотите сохранить вывод каждого файла, обрабатываемого в соответствующем файле с .txt
расширение, замененное .doc
, рычаги awk
переменная FILENAME
получить имя файла, sub(".txt$", ".doc", FILENAME
сделать переименование и ENDFILE
сделать обработку матриц в конце каждой обработки файла:
awk -vFPAT='https?:[^\\s]+' 'BEGIN {PROCINFO["sorted_in"]="@ind_str_asc"} \
/\w+/{a[$1]} ENDFILE{sub(".txt$", ".doc", FILENAME); \
for(i in a) print i > FILENAME}' *.txt