UNIX_shell_programming(几道练习题目)
来源:互联网 发布:阿里云服务器租用费用 编辑:程序博客网 时间:2024/06/05 18:42
Word Frequency
Given n files as command line arguments, calculate the frequency of words for each file, and display the results in a table. Words are defined to be one or more continuous list of letters (see the definition of letters above). Every non-letter character is to be considered whitespace.
The output should be a multi-column list, the first column being the list of words encountered (in lowercase) in any of the input files (sorted according to theC locale), and subsequent columns containing the number of occurrences of that word infile1 ... filen, separated by spaces. Example output for 2 files:
a 5 8the 6 3word 2 0she 3 5
#!/bin/bash# Word frequencies# $Id: unix9-wordfreq.sh 191 2006-03-29 11:07:00Z cactus $# See http://cactus.rulez.org/elte/2005-1-unix/#9 for a description of what it does# Licensed under the GNU General Public License, version 2function help () { self=`basename $0` cat << EOFUsage: $self FILE1 [FILE2...]Creates statistics about the words occuring in the files.Options: -help Display this help message(C) 2005 Dr. ERDI Gergo <cactus@cactus.rulez.org>Version: \$Id: unix9-wordfreq.sh 191 2006-03-29 11:07:00Z cactus $EOF exit 0}function error () { echo ERROR: $@! >&2 exit 1}# Ez mashogy mukodik mint a tobbi: itt csak vegignezzuk az opciokat,# hogy van-e koztuk -helpfunction options () { [ -z "$1" ] && return case "$1" in-help) help ;;*) [ -f "$1" -a -r "$1" ] || error "$1: Unable to open file" shift options "$@" ;; esac}function awk_count () { AWKPROG='BEGIN { FS="[^a-zA-ZáÁéÉíÍóÓöÖõÕúÚüÜûÛ]" ekezet_lower["Á"] = "á"; ekezet_lower["É"] = "é"; ekezet_lower["Í"] = "í"; ekezet_lower["Ó"] = "ó"; ekezet_lower["Ö"] = "ö"; ekezet_lower["Õ"] = "õ"; ekezet_lower["Ú"] = "ú"; ekezet_lower["Ü"] = "ü"; ekezet_lower["Û"] = "û";}function iso88592_tolower (s) { ret="" for (j = 1; j <= length(s); j++) ret = ret iso88592_tolower_c(substr(s, j, 1)); return ret;}function iso88592_tolower_c (c) { if (match (c, "[a-zA-Z]")) return tolower (c); else if (c in ekezet_lower) return ekezet_lower[c]; return c;} /[a-zA-ZáÁéÉíÍóÓöÖõÕúÚüÜûÛ]/ { for (i = 1; i != NF + 1; i++) { if (match ($i, "^[a-zA-ZáÁéÉíÍóÓöÖõÕúÚüÜûÛ]+$")){ words[iso88592_tolower($i)]++;} }}END { for (i in words) printf "%s %s\n", i, words[i];}' echo "awk '$AWKPROG' '$1' 2>/dev/null|sort"}# Ez elemenkenti feldolgozas, oriasi Fothi power :)function awk_join () { AWKPROG='function read1 () { if (!eof1) { eof1 = (getline <= 0); if (eof1) return; key1 = $1; val1 = $2; width = NF - 1; for (i = 3; i <= NF; ++i) val1 = sprintf ("%s %s", val1, $i); }}function read2 () { if (!eof2) { eof2 = ((getline < f2) <= 0); if (eof2) return; key2 = $1; val2 = $2; }}function join () { printf "%s %s %s\n", key1, val1, val2;}function fill_from_1 () { printf "%s %s 0\n", key1, val1, "0";}function fill_from_2 () { printf "%s ", key2; for (i = 0; i < width; ++i) printf "0 "; printf "%s\n", val2;}BEGIN { FS=" "; read1(); read2(); while (!eof1 || !eof2) { if (key1 == key2) { join(); read1(); read2(); } else if (eof2 || (!eof1 && (key1 < key2))) { fill_from_1(); read1(); } else { fill_from_2(); read2(); } } exit}' echo "awk -v f2=<($1) '$AWKPROG' 2>/dev/null"}[ $# -lt 1 ] && error "Missing arguments"options "$@"fullpipe="$(awk_count $1)"shiftfor i in "$@"do counter="`awk_count $i`" awkline="`awk_join "$counter"`" fullpipe="$fullpipe | $awkline"doneexport LANG=export LC_ALL=export LC_CTYPE=eval "$fullpipe"转载自:http://gergo.erdi.hu/elte/2005-1-unix/
- UNIX_shell_programming(几道练习题目)
- 一天几道SQL题目(一)
- 一天几道SQL题目(三)
- 几道面试题目
- 正则几道题目
- 几道汇编题目
- 几道题目
- 收集几道题目
- 几道题目
- oj练习四道题目
- 动态规划(练习题目,)
- 百度几道面试题目
- 几道C++面试题目
- 几道KMP题目,经典
- 几道动态规划题目
- 几道字典树题目
- 几道有意思的题目
- 几道C语言题目
- iOS实现NSURLConnection进行异步下载
- java中数据结构Bitmap查找相等元素
- Oracle DB 诊断数据库
- mathquill 未解决的弊端
- Supported Values for @SuppressWarnings
- UNIX_shell_programming(几道练习题目)
- php array的用法
- jqGrid——合计、默认查询条件、自适应、序号等
- IOS中处理异步连接中的超时
- windows任务定时重启tomcat
- ios排序
- 前端开发必备!Emmet使用手册
- B. Playing Cubes
- 通用的用户登录过滤器(SessionFilter)