我有一个制表符分隔的结果文件,其中包含数千行结果。 每行包含以下形式的数百个不同变量:
50001=1 50002=45 50003=-34 50004=MATCH 50005=0.2354
50001=0 50002=167 50003=5 50004=NO_MATCH 50005=2.65
我需要一个bash脚本来遍历文件并收集一个特定变量的所有值和外观的数量,例如:
50004 - 1000 appearances total.
MATCH - 600 appearances.
NO_MATCH - 200 appearances.
PARTIAL_MATCH - 200 appearances
提前致谢!
答案 0 :(得分:1)
一种可能的解决方案可能是:
## replace with 'cat your_data_file'
function show_data {
cat << EOM
50001=1 50002=45 50003=-34 50004=MATCH 50005=0.2354
50001=0 50002=167 50003=5 50004=NO_MATCH 50005=2.65
EOM
}
## include '=' sign to avoid '-' issue
function simple_grep {
show_data | grep -c "=${RHV}"
}
## change '-' to wildcard '?' otherwise error if '-' first char
function mod_grep {
show_data | grep -c "${RHV/-/?}"
}
##
## option to show matches so you can confirm
if [[ "$1" == "show_matches" ]] ; then SHOW_MATCH=1 ; shift ; fi
## which grep solution to use
if [[ "$1" == "mod" ]] ; then USE_MOD=1 ; shift ; fi
### change ' ' to '\t' if tab-delimited
### create unique list of 'right-hand' values
for RHV in $(show_data | tr ' ' '\n' | awk -F '=' '{print $2}' | sort | uniq)
do
printf "%15s | " ${RHV}
if [[ ${USE_MOD} ]]
then
mod_grep
else
simple_grep
fi
if [[ ${SHOW_MATCH} ]] ; then show_data | grep "${RHV/-/?}" ; echo "##" ; fi
done
:)
戴尔