Сценарий оболочки для печати дерева каталогов и содержания файлов с хорошей презентацией

Хорошо, Предполагая, что Ваш файл является текстовым файлом, разделяя поля разделителем запятой''. Вы также знали бы который поле 'transactionid' с точки зрения его положения. Предположение, что Ваш 'transactionid' поле является 7-м полем.

awk -F ',' '{print $7}' text_file | sort | uniq -c

Это считало бы отличные/уникальные случаи в 7-м поле и печатает результат.

5
15.02.2013, 13:15
2 ответа

Дерево каталогов структурной распечатки программы и содержание файлов сценария

Править: Более новая версия с полным оглавлением как дерево и поддержка изображения, во второй части.

Используя \verbatiminput от пакета дословно.

Как это:

#!/bin/bash

tempfile=$(mktemp /tmp/dirtree-XXXXX.tex)
trap "rm $tempfile" 0 1 2 3 6 9 15

cat <<EOF >$tempfile
\documentclass[11pt,a4paper,oneside]{article}
\usepackage{fullpage,verbatim,dirtree}
\begin{document}
\section{Listing}
\dirtree{%
EOF

export -a scriptList=()
while IFS=/ read -a fPath ;do
    file="${fPath[*]:${#fPath[*]}-1}"
    IFS=/
    full="${fPath[*]}"
    type="$(file -b "$full")"
    echo .${#fPath[@]} "${file//_/\\_}\DTcomment{$type}. "
    [[ "$type" =~ script.text ]] && scriptList=("${scriptList[@]}" "$full")
    done  < <(
    find $1 -type d -o -type f
)  >>$tempfile

export IFS=$'\n\t '
echo "}" >>$tempfile

for file in "${scriptList[@]}";do
    name="${file##*/}"
    printf "\\section{%s}\n{\\\\scriptsize\\\\verbatiminput{%s}}\n" \
    "${name//_/\_}" "${file}"  >>"${tempfile}"    
done

echo >>"${tempfile}" '\end{document}'

pdflatex -interaction nonstopmode "${tempfile}"

Кто произвел бы этот вид вывода:

print directory content

Дерево каталогов структурной распечатки программы с оглавлением, сценариями и файлами изображений.

NOTA: Для вычислений toc, latex должны быть выполнены два раза.

ошибки:

Этот сценарий является только подтверждением концепции, тип изображений, вероятно, ограничен и мог быть улучшен, в конечном счете справкой imagemagik, netpbm или любого графического lib... и так далее

todo:

  • зафиксируйте размеры изображений
  • улучшите фильтрацию изображений
  • добавьте поддержку PDF, PS и возможно другого печатаемого как .man, .tex, .sgml, .odf
    • добавьте опцию для печати первой страницы файлов документов.
  • сделайте и произведите чистку временных файлов более правильно.

Такие вот дела:

#!/bin/bash

tempfile=$(mktemp /tmp/dirtree-XXXXX.tex)
# trap "rm $tempfile" 0 1 2 3 6 9 15

cat <<EOF >$tempfile
\documentclass[11pt,a4paper,oneside]{article}
\usepackage{fullpage,graphicx,verbatim,dirtree}
\makeatletter
\newcommand{\typePPage}[2]{\DTcomment{{\scriptsize #1
\begin{minipage}[t]{5em}\mbox{}\hfill\ifx\@empty#2\else%
s.$\ref{sec:#2}$, p.$\pageref{sec:#2}$\fi\end{minipage}}}}
\makeatother
\begin{document}\parindent=0pt%
\section{Listing}
\dirtree{%
EOF

export -a scriptList=()
export -A typelist=()
while IFS=/ read -a fPath ;do
    file="${fPath[*]:${#fPath[*]}-1}"
    IFS=/
    full="${fPath[*]}"
    type="$(file -b "$full")"
    if [[ "$type" =~ script.text ]] || [[ "$type" =~ image ]] ;then
    scriptList=("${scriptList[@]}" "$full")
    typelist["${full//\//_}"]="$type"
    echo .${#fPath[@]} \
        "${file//_/\\_}\typePPage{$type}{${file//[\/.+()_-]/}}. "
    else
    echo .${#fPath[@]} "${file//_/\\_}\typePPage{$type}{}. "
    fi
    done  < <(
    find $1 -type d -o -type f
)  >>$tempfile

export IFS=$'\n\t '
echo "}" >>$tempfile

for file in "${scriptList[@]}";do
    name="${file##*/}"
    printf '\\section{%s}\n\\label{sec:%s}\n' \
    "${name//_/\_}" "${name//[\/.+()_-]/}"
    if [[ "${typelist["${file//\//_}"]}" =~ script.text ]];then
    printf '{\\scriptsize\\verbatiminput{%s}}\n' "${file}"
    else
    printf '\\includegraphics[width=\\textwidth]{%s}\n' "${file}"
    fi
done >>"${tempfile}"

echo >>"${tempfile}" '\end{document}'

pdflatex -interaction nonstopmode "${tempfile}" >/dev/null 2>&1
pdflatex -interaction nonstopmode "${tempfile}"

Мог произвести:

Sample of output

3
27.01.2020, 20:41

Мне не точно ясно, что Вы хотите, но насколько я понимаю, Вы хотите иметь вывод всех .sh файлы распечатаны в tmp.tex. Затем Вы могли сделать что-то как

find -name "*.sh" -exec cat "{}" + >> tmp.tex

Которые связывают все .sh файлы, и затем добавляют его к tmp.tex.

0
27.01.2020, 20:41
  • 1
    Или просто используйте cat **/*.sh >> tmp.tex если на Bash 4 + с опцией globstar на. –  Werner Lehmann 30.12.2012, 00:31

Теги

Похожие вопросы