From 20ad00fc5da62e9e26e62df59f6e498990d14bbd Mon Sep 17 00:00:00 2001 From: Chris Greenshields <http://cfd.direct> Date: Fri, 17 Jun 2016 14:53:13 +0100 Subject: [PATCH] foamSearch: new script that searches a directory for dictionary files of a particular name and extracts entries of a particular keyword, sorting results into a unique list. For example, foamSearch $FOAM_TUTORIALS laplacianSchemes.default fvSchemes produces... default Gauss linear corrected; default Gauss linear limited corrected 0.33; default Gauss linear limited corrected 0.5; default Gauss linear orthogonal; default Gauss linear uncorrected; default none; Uses the fantastic foamDictionary utility. --- bin/foamSearch | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100755 bin/foamSearch diff --git a/bin/foamSearch b/bin/foamSearch new file mode 100755 index 00000000000..e458385db2a --- /dev/null +++ b/bin/foamSearch @@ -0,0 +1,90 @@ +#!/bin/sh +#------------------------------------------------------------------------------ +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation +# \\/ M anipulation | +#------------------------------------------------------------------------------- +# License +# This file is part of OpenFOAM. +# +# OpenFOAM is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. +# +# Script +# foamSearch +# +# Description +# Searches a directory for dictionary files of a particular name and +# extracts entries of a particular keyword, sorting into a unique list. +# +# Requires foamDictionary. +# +#------------------------------------------------------------------------------ +Script=${0##*/} + +usage() { + while [ "$#" -ge 1 ]; do echo "$1"; shift; done + cat<<USAGE +Usage: $Script [OPTIONS] <directory> <keyword> <file> + +Options: +-c | -count prefix lines by the number of occurrences +-h | -help help + +* Searches the <directory> for files named <file> and extracts entries with + <keyword>. Sorts result into a list of unique entries (removing repeats). + + 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 -c $FOAM_TUTORIALS relaxationFactors.equations.U fvSolution + +USAGE + exit 1 +} + +case "$1" in +(-c | -count) + COUNT="-c" + shift + ;; +(-h | -help) + usage + ;; +-*) + usage "$1 is not a valid option/filename" + ;; +esac + +[ "$#" -eq 3 ] || usage "Wrong number of arguments: expected 3, found $#" +[ -d "$1" ] || usage "$1 is not a directory" + +TEMP=temp.$$ +FILES=$(find $1 -name $3) +[ -n "$FILES" ] || usage "No file $3 found in $1" + +for F in $FILES +do + foamDictionary -entry $2 $F 2>/dev/null >> $TEMP +done + +[ -s "$TEMP" ] && \ + sort $TEMP | uniq $COUNT | sed '/^[\t 1-9]*$/d' || \ + echo "No keyword $2 found in $3 files" + +rm $TEMP 2>/dev/null + +#------------------------------------------------------------------------------ -- GitLab