File: foamSearch

package info (click to toggle)
openfoam 1912.200626-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 238,940 kB
  • sloc: cpp: 1,159,638; sh: 15,902; ansic: 5,195; lex: 660; xml: 387; python: 282; awk: 212; makefile: 103; sed: 88; csh: 3
file content (131 lines) | stat: -rwxr-xr-x 3,481 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/sh
#------------------------------------------------------------------------------
# =========                 |
# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
#  \\    /   O peration     |
#   \\  /    A nd           | www.openfoam.com
#    \\/     M anipulation  |
#------------------------------------------------------------------------------
#     Copyright (C) 2016 OpenFOAM Foundation
#     Copyright (C) 2018 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
#     This file is part of OpenFOAM, licensed under GNU General Public License
#     <http://www.gnu.org/licenses/>.
#
# Script
#     foamSearch
#
# Description
#     Search a directory for dictionary files of a particular name and
#     extract entries of a particular keyword, sorting into a unique list.
#
#     Requires foamDictionary.
#
#------------------------------------------------------------------------------
printHelp() {
    # Print usage to stdout so that it can be captured for bash completion
    cat<<USAGE

Usage: ${0##*/} [OPTIONS] <directory> <keyword> <fileName>
       ${0##*/} [OPTIONS] <keyword> <fileName>

Options:
    -c | -count     prefix lines by the number of occurrences
    -help           help

* Searches the <directory> for files named <fileName> and extracts entries
  with <keyword>. Sorts result into a list of unique entries.
  Uses the cwd if the <directory> is not provided.

Examples:
* Default ddtSchemes entries in the fvSchemes files in all tutorials:
    foamSearch \$FOAM_TUTORIALS ddtSchemes.default fvSchemes

* Relaxations factors for U in fvSolutions files in all tutorials:
    foamSearch -count \$FOAM_TUTORIALS relaxationFactors.equations.U fvSolution

USAGE
    exit 0  # A clean exit
}


# Report error and exit
die()
{
    exec 1>&2
    echo
    echo "Error encountered:"
    while [ "$#" -ge 1 ]; do echo "    $1"; shift; done
    echo
    echo "See '${0##*/} -help' for usage"
    echo
    exit 1
}

#-------------------------------------------------------------------------------

# Parse options
unset optCount
unset dirName keyword fileName

while [ "$#" -gt 0 ]
do
    case "$1" in
    -h | -help*)
        printHelp
        ;;
    -c | -count)
        optCount="-c"
        shift
        ;;
    -*)
        die "unknown option: '$1'"
        ;;
    *)
        break
        ;;
    esac
done

# Basic checks
if [ "$#" -eq 2 ]
then
    dirName="./"
    keyword="$1"
    fileName="$2"
elif [ "$#" -eq 3 ]
then
    dirName="$1"
    keyword="$2"
    fileName="$3"
else
    die "Expected 2 or 3 arguments, but found $# instead"
fi

[ -d "$dirName" ] || die "Not a directory: $dirName"
command -v foamDictionary > /dev/null || die "No foamDictionary command"

#-------------------------------------------------------------------------------

fileList=$(find $dirName -name "$fileName" -type f)
[ -n "$fileList" ] || {
    echo "No '$fileName' file found in $dirName" 1>&2
    exit 2
}

echo "Processing $(echo $fileList | wc -w) $fileName files..." 1>&2

tmpFile=${TMPDIR:-/tmp}/foamSearch.$$
trap "rm -f $tmpFile 2>/dev/null; exit 0" EXIT TERM INT

for i in $fileList
do
    foamDictionary -entry "$keyword" $i 2>/dev/null
done > $tmpFile

[ -s "$tmpFile" ] && \
    sort $tmpFile | uniq $optCount | sed '/^[\t 1-9]*$/d' || \
    echo "No keyword '$keyword' found in '$fileName' files" 1>&2

#------------------------------------------------------------------------------