Wishlist 0 ¥0.00

河南3180家餐饮单位和学校食堂可实现厨房网上直播

 记者从河南省食品药品监督管理局获悉,借助互联网、智能手机客户端等技术,河南推动“明厨亮灶”工程建设,目前(2016年11月02日)已有3000多家餐饮单位和学校食堂实现食品加工和后厨环境的“网上直播”,由此走出一条食品安全政府、企业和社会共治的路子。

  “明厨亮灶”是指餐饮服务提供者通过采用视频技术、透明展示、厨房开放活动和阳光公示等方式,公开厨房环境、加工过程、清洗消毒、食品原料储存状态等的行为。

  河南省已累计实施“明厨亮灶”的餐饮服务单位达到71065家,占全省餐饮单位总数的42%,其中采用视频技术的单位33576家;采用透明展示的单位35817家。今年以来共举办厨房开放日活动27691家次,采取阳光公示的单位达到8758家。

  河南省食品药品监督管理局副局长王建防介绍,“明厨亮灶”工程旨在让后厨看得见、看得清、看得远,让广大消费者对餐饮食品安全可体验、可参与、可监督。经过几年来的努力,目前基本实现了餐饮单位从被动接受到主动参与的转变,餐饮食品安全由单纯的政府监管向政府、企业和社会三方共治转变。

  “在因地制宜、因企制宜的原则指导下,全省把学校食堂、高速公路服务区食堂和大中型社会餐饮单位作为重点突破口,引导他们采用视频技术,开发APP,实现‘明厨亮灶’信息与监管平台、终端用户之间的无缝对接,目前全省已有3180家餐饮单位和学校食堂可以实现‘网上直播’。”王建防说。

  按照计划,河南省辖市城区、县(市)城区、农村中小学校食堂将在2020年底全部完成“明厨亮灶”工程建设;“十三五”期间,全省高速公路服务区餐饮服务经营者的“明厨亮灶”工程建设也将基本完成。

  今年早些时候,河南省还将“明厨亮灶”工程延伸到了农村集体聚餐管理上,通过在农村固定聚餐场所安装摄像头,可以利用移动执法终端实时查看现场情况。

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 38218371 bytes) in

解决办法三种:

一、修改php.ini(推荐)

 

memory_limit = 128M

二、在程序里面添加如下语句

 

ini_set(”memory_limit”, ”128M”);

三、,添加如下内容

 

php_value memory_limit 128M

如果还不能解决,就把它改得再大一些。

通过这 9 本开源好书学习 C 语言

书是非常私人的东西,编程类书籍也不例外。我们都是通过阅读书籍来帮助掌握某种语言的基本知识。随后又通过阅读书籍来全面探索这门语言的灵活性。我仔细考察了一些我最喜爱的 C 语言书籍,并从其中选出了对我意义最大的九本。

C 语言是一种通用的、面向过程的高级编程语言。也是最具流行度和影响力的编程语言之一。该语言在设计时就被设计为可以通过编译器进行编译,以此来对内存进行底层操作、高效地执行机器指令以及在运行时仅需要最小的支持。很多很多编程语言都得益于 C 语言, C 语言就像是编程界的通用语言一样。

C 语言非常易懂。它允许程序员能够以一种清晰、简单、符合逻辑的方式来组织程序。这是一种非常灵活、实用并且简洁的语言,同时它还具有非常容易读懂的语法。使用 C 语言编写的代码运行非常快。可以非常简单地操作计算机的底层设施。通过编译器的指令可以允许我们为不同体系结构的设备生成同一个版本的程序。

C 语言是自由的。因此学习 C 语言的书籍也是体现了其自由性。快来看看我挑选的开源书籍,有没有哪一本能够吸引你?好好享受它吧!

《 C 语言》( The C Book

作者: Mike Banahan, Declan Brady 和 Mark Doran ,350 页

这本书是为那些已经具备使用现代高级面向过程编程语言的程序员设计的。这本书专注于那些 C 语言的特有之处。尤其是使用 C 语言的方式是这本书所重点关注的。

包含以下章节:

  • 变量及运算法则介绍 – 介绍了 C 语言的基础知识, 包括关键字和标识符,变量声明,实数类型,整型,表达式和运算法则以及常量

  • 控制流及逻辑表达式 – 这一章介绍了在 C 语言中可以用于控制程序流程的几种方法,包括一些尚未介绍的语句。 控制流,逻辑表达式以及奇怪的运算符。

  • 函数 – 函数的类型, 递归,传参数以及链接

  • 数组和指针 – 数组, 指针, 字符处理, sizeof 以及储存空间分配, 函数指针,包含指针的表达式,数组,&运算符以及函数声明

  • 结构体数据类型 – 结构体, 联合体, 位字段, 枚举类型, 限定符、派生类型以及初始化

  • 预处理器 – 预处理器是如何工作的及其相关指令

  • C 语言中的一些特定内容 – 声明, 定义,typedefconst 和 volatile以及序列点

  • 库 – 诊断, 字符处理, 本地化, 与具体实现相关的限制, 数学函数, 非局部跳转, 信号处理, 可变参数, 输入输出, 格式化 I/O, 字符 I/O, 无格式 I/O, 随机访问函数, 通用函数, 字符串处理, 日期和时间

  • C 语言编写的完整程序 – 综合以上内容, main函数的参数, 解析程序参数, 模式匹配程序以及一个难度更大的程序

作者允许读者利用此书做任何他们想做的事情,只需说明作者和版权。经Mike Banahan确认,本书通过知识共享协议发布。

风格的要素—— C 语言版(C Elements of Style

作者 Steve Oualline ,265页

这是一本十分有用的编程风格指南,指导 C 和 C++程序员如何去编写可读性良好的,易懂的,易于维护的程序。不论你是一个学生还是专业程序员,你都能从这本书中提供的技巧和技术中获益,构建优雅可靠的代码。

这本书意在向读者们展示如何在你的程序中融入风格良好的代码。机器仅处理代码,而人类关注于注释。良好的编程风格与这两部分都有关。

我们的最终目标是构建设计良好,编写良好的代码,这种代码对于计算机来说是高效的,同时包含了精心编写的注释用于帮助人类理解程序。这样一来,调试,维护和增强程序,都变得更加容易了。最终还提升了代码的可读性,简洁性,可靠性和可维护性。

在本书中,你可以找到有关编写注释,程序头,变量命名,语句格式化,语句细节,编写预处理器命令,组织目录和创建makefile的指南。

本书通过知识共享协议发布。

《编写你自己的Lisp语言》(Build Your Own Lisp

作者 Daniel Holden ,212页

在学习 C 语言的同时学习如何创造你自己的编程语言——一个最简的Lisp语言(仅用不到1000行代码)。

这本书是为两种人写的,一种是想要学习 C 语言的人,另一种是想要知道如何创建一门语言的人。本书并不适合作为第一本入门书籍,因为你需要一些编程经验才能读懂它的内容。

本书基于 Creative Commons Attribution-NonCommercial-ShareAlike 3.0.协议发布

纸质版可以在Amazon上购买。

《 GNU C 语言参考手册》(The GNU C Reference Manual

作者 Trevis Rothwell, James Youngman ,91页

本书是一本 C 语言参考手册,意在写明C89,C99标准以及当前GNU对标准 C 语言的扩展情况。本书并不适合新手阅读。

包含以下章节:

  • 词法元素——这部分内容描述了预编译之后,组成 C 语言代码的词法元素。包括5种:关键字,标识符,常量,操作符和分隔符

  • 数据类型——研究基础的数据类型,枚举,联合体,结构体,数组,指针,不完全类型,类型修饰词,储存类型修饰词以及重命名类型

  • 表达式和操作符 —— 还介绍了自增/自减,算数操作符,复共轭性,比较操作符,逻辑运算符,位移,位运算符,指针运算符,sizeof,类型转换等等。

  • 语句 —— 标签,表达式,if 语句,switch 语句,while 语句,do 语句,for 语句,代码块,null 语句,goto 语句,break 语句,continue 语句,return 语句以及 typedef 语句

  • 函数 —— 学习函数声明,函数定义,函数调用,参数,变长参数列表,通过指针调用函数,main 函数,递归函数等等。

  • 程序结构和定义域 —— 从宏观上来看程序

  • 一个例程 —— 一个用 C 语言编写的完整程序,包含 C 语言源文件和头文件。这个程序是一个典型“hello world”程序的扩展版,它向我们展示了在 GNU FSF 项目中 C 语言是如何工作的。

本书基于GNU Free Documentation License Version 1.3 及其更新版本发布。

《GNU C 语言编程教程》(The GNU C Programming Tutorial

作者 Mark Burgess, Ron Hale-Evans ,290页

本书以逻辑顺序向读者介绍了 C 语言的基本内容。本书内容涵盖了 C 语言的全部主要内容的细节以及如何使用 C 语言编程,特别强调了GNU/Linux编译器以及相关软件。

一些章节主要介绍了函数,变量以及声明,作用域,表达式和操作符,参数,指针,判定,循环,数组,字符串,输入输出等等。

本书基于GNU Free Documentation 协议 Version 1.1版发布。

《 C 语言基础》(Essential C

作者 Nick Parlante ,45页

这份简短的文档解释了 C 语言全部的常用特性和技术。这份文档十分简洁,因此它的目标人群是已经具有其他编程语言背景的人。

内容包括变量,整型,浮点型,类型提升,截断,操作符,控制结构(if,while,for),函数,数值参数,引用参数,结构体,指针,数组,预处理器以及 C 语言标准库函数。

目录:

  • 简介

  • 基础类型与运算符

  • 控制结构

  • 复杂数据类型

  • 函数

  • 杂项

  • 高级数组与指针

  • 运算符和标准库

根据作者的描述,我们得知这是一本基于开源协议发布的书籍。

《Beej的 C 语言教程》(Beej’s Guide to C Programming

作者 Brian “Beej” Hall ,130 pages

本书试图为那些心存困惑的读者带来一种仅能通过纯粹 C 语言编程而产生的快感。

章节:

  • 构建程序的基本结构块

  • 变量,表达式和,语句。变量就是一个数字的名字——一个 C 语言表达式可以包含其他的表达式以及运算符。文章还介绍了ifwhiledo while以及程序重复执行的for语句。

  • 函数——当程序块变得很大,或是当这些程序块用来执行一些特定的工作时,我们会把它们封装到函数中。

  • 变量(续篇)——探讨了变量的作用域和储存类型

  • 指针——它们是数据在内存中的地址。就像一个整型的值可以是12,一个指针的值就是数据在内存中的地址

  • 结构体——结构体允许你将逻辑上相关的变量分组。随后你可以将其作为一个整体来使用。

  • 数组——一组相关数据的线性集合

  • 字符串—— C 语言中的字符串就是内存中的一组连续的比特,包含了一组字符

  • 动态内存——探讨了malloc(), free(), realloc() 和 calloc() 函数

  • 更多内容——指针运算,typedef,枚举,结构体声明,命令行参数,多维数组,类型转换和类型提升,不完整类型,void指针,NULL指针和static关键字

  • 标准输入输出库——用来进行文件的读写。

  • 字符串操作——用来查找子串的函数,连接字符串的函数,获取字符串长度的函数,等等。

  • 算数——一些可以满足你基本算数需求的函数。

本书基于Creative Commons Attribution-Noncommercial- No Derivative Works 3.0 协议发布。

《现代 C 语言》(Modern C

作者 Jens Gustedt ,310页

本书鼓励读者逐级探索 C 语言的特性。内容一共分为如下五层境界:

  • 第一层——使读者了解最基本的 C 语言程序。了解使用 C 语言的目的和数据结构,以及如何去使用它们

  • 第二层——详细的说明了大部分主要概念以及特性,包括控制结构,数据类型操作符和函数。这一级的主要目的是让读者能够对于这些运行程序必备的知识,有更深刻的理解。

  • 第三层——进入 C 语言的核心部分。详细的解释了指针,让你熟悉 C 语言的内存模型,并且让你了解大多数 C 语言库的接口

  • 第四层——深入理解一些特定的主题。比如性能,重入,原子性,线程及泛型编程

  • 第五层——探讨了作者对这门语言未来发展趋势的理解

本书基于Creative Commons Attribution-Noncommercial- No Derivative Works 3.0 协议发布

《GCC简介》(An Introduction to GCC

作者 Brian Gough ,144页

本书介绍了 GNU C 语言和 C++编译器——gcc 和 g++,它们是 GNU 编译器套装(GCC)的一部分。

本书介绍了如何使用编译器。通过多年以来对邮件列表中的问题的观察,本书带领读者直击 GCC 的重要内容。

章节介绍:

  • 编译c程序——介绍了如何使用gcc来编译 C 语言程序。单个文件或多个文件均可以编译,也可以使用操作系统函数和头文件。

  • 编译选项——介绍了gcc中一些常用的编译选项。这些参数控制一些功能,例如搜索库函数和头文件的路径,提供额外的编译告警和诊断。预处理宏和 C 语言方言。

  • 使用预处理器——描述了cpp(GNU C preprocessor)的使用方法,cpp是GCC的一部分。预处理器会在编译前将代码中的宏展开,当GCC处理c或者c+代码时,预处理器会自动被调用。

  • 编译带有debug信息的程序——提供了一个-g选项用以在中间文件和可执行文件中存储额外的调试信息。这些调试信息使得我们可以追踪错误,将机器指令中的问题定位到源代码中。

  • 优化编译——GCC是一个优化过的编译器。它提供了很多选项,可以加速编译或是减少编译后文件的体积。

  • 编译C++程序——介绍了如何使用GCC编译C++程序以及该语言可以使用的命令行选项。

  • 平台相关选项——介绍了一些常见平台可以使用的选项

  • 排错——GCC提供了一些帮助和诊断选项用于帮助我们定位编译过程中出现的问题。

  • 编译器相关工具——介绍了GCC编译过程中会用到的一些有用的工具。包括用来创建库的 GNU 归档工具 ar,GNU 性能和覆盖率测试程序gprof 和 gcov

  • 编译器是如何工作的——详细介绍了GCC是如何把源文件编译为可执行文件的。编译是一个多阶段过程,涉及很多工具,包括GNU编译器本身,GNU汇编器,以及GNU链接器。在编译过程中使用的各种工具,我们统称为编译链。

  • 检查编译后的文件——介绍了一些用来检查可执行文件和obj文件内容的工具。

  • 常见错误信息——介绍了gcc和g++产生的最常见的错误和告警信息。每种情况都带有原因分析,样例以及建议的解决办法。

  • 获取帮助——如果读者遇到了书中没有提到的问题,还有很多介绍GCC和语言的手册可以参考。

本书基于GNU Free Documentation协议发布


很多 C 语言书籍都可以免费下载,但是可惜的是它们并没有以开源协议来发布,或其基于何种协议并没有明确说明。以下对其进行介绍,排名不分先后:

  • 《C编程导论》( Introduction to C Programming )– 作者 Rob Miles

  • 《新标准 C 语言》(The New Standard C: An Economic and Cultural Commentary) – 作者 Derek M. Jones

  • 《使用标准 C 语言进行面向对象编程》(Object-Oriented Programming with ANSI-C )– 作者 Axel-Tobias Schreiner

  • 《编写零缺陷的 C 语言代码》(Writing Bug-Free C Code) – 作者 Jerry Jongenius

最后,如果你想买一本权威参考书,请认准《C程序设计语言》(The C Programming Language)。这本书非常简练,不适合新手,但是被奉为经典。

Linux Shell 文本处理工具集锦

本文将介绍Linux下使用Shell处理文本时最常用的工具:

find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk;

提供的例子和参数都是最常用和最为实用的;

 

我对shell脚本使用的原则是命令单行书写,尽量不要超过2行;

如果有更为复杂的任务需求,还是考虑python吧;

 

find 文件查找

 

  • 查找txt和pdf文件

 

  find . \( -name "*.txt" -o -name "*.pdf" \) -print

 

  • 正则方式查找.txt和pdf

 

  find . -regex  ".*\(\.txt|\.pdf\)$"

-iregex: 忽略大小写的正则

 

  • 否定参数

       查找所有非txt文本

 

   find . ! -name "*.txt" -print

 

  • 指定搜索深度

       打印出当前目录的文件(深度为1)

 

  find . -maxdepth 1 -type f  

 

定制搜索

 

  • 按类型搜索:

 

  find . -type d -print  //只列出所有目录

-type f 文件 / l 符号链接

 

  • 按时间搜索:

 

-atime 访问时间 (单位是天,分钟单位则是-amin,以下类似)

-mtime 修改时间 (内容被修改)

-ctime 变化时间 (元数据或权限变化)

 

  • 最近7天被访问过的所有文件:

 

 find . -atime 7 -type f -print

 

  • 按大小搜索:

       w字 k M G

       寻找大于2k的文件

 

 find . -type f -size +2k

 

按权限查找:

 

  find . -type f -perm 644 -print //找具有可执行权限的所有文件

 

按用户查找:

 

  find . -type f -user weber -print// 找用户weber所拥有的文件

 

找到后的后续动作

 

  • 删除:

删除当前目录下所有的swp文件:

 

  find . -type f -name "*.swp" -delete

 

  • 执行动作(强大的exec)

 

  find . -type f -user root -exec chown weber {} \; //将当前目录下的所有权变更为weber

 

注:{}是一个特殊的字符串,对于每一个匹配的文件,{}会被替换成相应的文件名;

eg:将找到的文件全都copy到另一个目录:

 

  find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;

 

  • 结合多个命令

tips: 如果需要后续执行多个命令,可以将多个命令写成一个脚本。然后 -exec 调用时执行脚本即可;

 

  -exec ./commands.sh {} \;

 

-print的定界符

 

默认使用'\n'作为文件的定界符;

-print0 使用'\0'作为文件的定界符,这样就可以搜索包含空格的文件;

 

grep 文本搜索

 

grep match_patten file // 默认访问匹配行

 

  • 常用参数

-o 只输出匹配的文本行 VS -v 只输出没有匹配的文本行

-c 统计文件中包含文本的次数

 

  grep -c "text" filename

 

-n 打印匹配的行号

-i 搜索时忽略大小写

-l 只打印文件名

 

  • 在多级目录中对文本递归搜索(程序员搜代码的最爱):

 

  grep "class" . -R -n

 

  • 匹配多个模式

 

  grep -e "class" -e "vitural" file

 

  • grep输出以\0作为结尾符的文件名:(-z)

 

  grep "test" file* -lZ| xargs -0 rm

 

xargs 命令行参数转换

 

xargs 能够将输入数据转化为特定命令的命令行参数;这样,可以配合很多命令来组合使用。比如grep,比如find;

 

  • 将多行输出转化为单行输出

cat file.txt| xargs

\n 是多行文本间的定界符

 

  • 将单行转化为多行输出

cat single.txt | xargs -n 3

-n:指定每行显示的字段数

 

xargs参数说明

 

-d 定义定界符 (默认为空格 多行的定界符为 \n)

-n 指定输出为多行

-I {} 指定替换字符串,这个字符串在xargs扩展时会被替换掉,用于待执行的命令需要多个参数时

eg:

 

cat file.txt | xargs -I {} ./command.sh -p {} -1

 

-0:指定\0为输入定界符

eg:统计程序行数

 

find source_dir/ -type f -name "*.cpp" -print0 |xargs -0 wc -l

 

sort 排序

 

字段说明:

-n 按数字进行排序 VS -d 按字典序进行排序

-r 逆序排序

-k N 指定按第N列排序

eg:

 

sort -nrk 1 data.txt

sort -bd data // 忽略像空格之类的前导空白字符

 

uniq 消除重复行

 

  • 消除重复行

  sort unsort.txt | uniq 

 

  • 统计各行在文件中出现的次数

  sort unsort.txt | uniq -c

 

  • 找出重复行

  sort unsort.txt | uniq -d

 

可指定每行中需要比较的重复内容:-s 开始位置 -w 比较字符数

 

用tr进行转换

 

  • 通用用法

 

  echo 12345 | tr '0-9' '9876543210' //加解密转换,替换对应字符

  cat text| tr '\t' ' '  //制表符转空格

 

  • tr删除字符

 

  cat file | tr -d '0-9' // 删除所有数字

 

  • -c 求补集

 

  cat file | tr -c '0-9' //获取文件中所有数字

  cat file | tr -d -c '0-9 \n'  //删除非数字数据

 

  • tr压缩字符

tr -s 压缩文本中出现的重复字符;最常用于压缩多余的空格

 

  cat file | tr -s ' '

 

  • 字符类

tr中可用各种字符类:

alnum:字母和数字

alpha:字母

digit:数字

space:空白字符

lower:小写

upper:大写

cntrl:控制(非可打印)字符

print:可打印字符

使用方法:tr [:class:] [:class:]

 

  eg: tr '[:lower:]' '[:upper:]'

 

cut 按列切分文本

 

  • 截取文件的第2列和第4列:

  cut -f2,4 filename

 

  • 去文件除第3列的所有列:

  cut -f3 --complement filename

 

  • -d 指定定界符:

  cat -f2 -d";" filename

 

  • cut 取的范围

N- 第N个字段到结尾

-M 第1个字段为M

N-M N到M个字段

 

  • cut 取的单位

-b 以字节为单位

-c 以字符为单位

-f 以字段为单位(使用定界符)

 

  • eg:

  cut -c1-5 file //打印第一到5个字符

  cut -c-2 file  //打印前2个字符

 

paste 按列拼接文本

 

将两个文本按列拼接到一起;

 

cat file1

1

2

 

cat file2

colin

book

 

paste file1 file2

1 colin

2 book

 

默认的定界符是制表符,可以用-d指明定界符

paste file1 file2 -d ","

1,colin

2,book

 

wc 统计行和字符的工具

 

wc -l file // 统计行数

wc -w file // 统计单词数

wc -c file // 统计字符数

 

sed 文本替换利器

 

  • 首处替换

  seg 's/text/replace_text/' file   //替换每一行的第一处匹配的text

 

  • 全局替换

   seg 's/text/replace_text/g' file

 

  • 默认替换后,输出替换后的内容,如果需要直接替换原文件,使用-i:

  seg -i 's/text/repalce_text/g' file

 

  • 移除空白行:

  sed '/^$/d' file

 

  • 变量转换

已匹配的字符串通过标记&来引用.

echo this is en example | seg 's/\w+/[&]/g'

$>[this]  [is] [en] [example]

 

  • 子串匹配标记

第一个匹配的括号内容使用标记 \1 来引用

  sed 's/hello\([0-9]\)/\1/'

 

  • 双引号求值

sed通常用单引号来引用;也可使用双引号,使用双引号后,双引号会对表达式求值:

  sed 's/$var/HLLOE/' 

 

当使用双引号时,我们可以在sed样式和替换字符串中指定变量;

eg:

p=patten

r=replaced

echo "line con a patten" | sed "s/$p/$r/g"

$>line con a replaced

 

  • 其它示例

字符串插入字符:将文本中每行内容(PEKSHA) 转换为 PEK/SHA

  sed 's/^.\{3\}/&\//g' file

 

awk 数据流处理工具

 

  • awk脚本结构

awk ' BEGIN{ statements } statements2 END{ statements } '

 

  • 工作方式

1.执行begin中语句块;

2.从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;

3.执行end语句块;

 

print 打印当前行

 

  • 使用不带参数的print时,会打印当前行;

 

  echo -e "line1\nline2" | awk 'BEGIN{print "start"} {print } END{ print "End" }' 

 

  • print 以逗号分割时,参数以空格定界;

 

echo | awk ' {var1 = "v1" ; var2 = "V2"; var3="v3"; \

print var1, var2 , var3; }'

$>v1 V2 v3

 

  • 使用-拼接符的方式(""作为拼接符);

 

echo | awk ' {var1 = "v1" ; var2 = "V2"; var3="v3"; \

print var1"-"var2"-"var3; }'

$>v1-V2-v3

 

特殊变量: NR NF $0 $1 $2

 

NR:表示记录数量,在执行过程中对应当前行号;

NF:表示字段数量,在执行过程总对应当前行的字段数;

$0:这个变量包含执行过程中当前行的文本内容;

$1:第一个字段的文本内容;

$2:第二个字段的文本内容;

 

echo -e "line1 f2 f3\n line2 \n line 3" | awk '{print NR":"$0"-"$1"-"$2}'

 

  • 打印每一行的第二和第三个字段:

  awk '{print $2, $3}' file

 

  • 统计文件的行数:

  awk ' END {print NR}' file

 

  • 累加每一行的第一个字段:

  echo -e "1\n 2\n 3\n 4\n" | awk 'BEGIN{num = 0 ;

  print "begin";} {sum += $1;} END {print "=="; print sum }'

 

传递外部变量

 

var=1000

echo | awk '{print vara}' vara=$var #  输入来自stdin

awk '{print vara}' vara=$var file # 输入来自文件

 

用样式对awk处理的行进行过滤

 

awk 'NR < 5' #行号小于5

awk 'NR==1,NR==4 {print}' file #行号等于1和4的打印出来

awk '/linux/' #包含linux文本的行(可以用正则表达式来指定,超级强大)

awk '!/linux/' #不包含linux文本的行

 

设置定界符

 

使用-F来设置定界符(默认为空格)

awk -F: '{print $NF}' /etc/passwd

 

读取命令输出

 

使用getline,将外部shell命令的输出读入到变量cmdout中;

 

echo | awk '{"grep root /etc/passwd" | getline cmdout; print cmdout }' 

 

在awk中使用循环

 

for(i=0;i<10;i++){print $i;}

for(i in array){print array[i];}

 

eg:

以逆序的形式打印行:(tac命令的实现)

 

seq 9| \

awk '{lifo[NR] = $0; lno=NR} \

END{ for(;lno>-1;lno--){print lifo[lno];}

} '

 

awk实现head、tail命令

 

  • head:

  awk 'NR<=10{print}' filename

 

  • tail:

  awk '{buffer[NR%10] = $0;} END{for(i=0;i<11;i++){ \

  print buffer[i %10]} } ' filename

 

打印指定列

 

  • awk方式实现:

  ls -lrt | awk '{print $6}'

 

  • cut方式实现

  ls -lrt | cut -f6

 

打印指定文本区域

 

  • 确定行号

  seq 100| awk 'NR==4,NR==6{print}'

 

  • 确定文本

打印处于start_pattern 和end_pattern之间的文本;

  awk '/start_pattern/, /end_pattern/' filename

 

eg:

seq 100 | awk '/13/,/15/'

cat /etc/passwd| awk '/mai.*mail/,/news.*news/'

 

awk常用内建函数

 

index(string,search_string):返回search_string在string中出现的位置

sub(regex,replacement_str,string):将正则匹配到的第一处内容替换为replacement_str;

match(regex,string):检查正则表达式是否能够匹配字符串;

length(string):返回字符串长度

 

echo | awk '{"grep root /etc/passwd" | getline cmdout; print length(cmdout) }' 

 

printf 类似c语言中的printf,对输出进行格式化

eg:

 

seq 10 | awk '{printf "->%4s\n", $1}'

 

迭代文件中的行、单词和字符

 

1. 迭代文件中的每一行

 

  • while 循环法

 

while read line;

do

echo $line;

done < file.txt

 

改成子shell:

cat file.txt | (while read line;do echo $line;done)

 

  • awk法:

cat file.txt| awk '{print}'

 

2.迭代一行中的每一个单词

 

for word in $line;

do 

echo $word;

done

 

3. 迭代每一个字符

 

${string:start_pos:num_of_chars}:从字符串中提取一个字符;(bash文本切片)

${#word}:返回变量word的长度

 

for((i=0;i<${#word};i++))

do

echo ${word:i:1);

done

About Us

Since 1996, our company has been focusing on domain name registration, web hosting, server hosting, website construction, e-commerce and other Internet services, and constantly practicing the concept of "providing enterprise-level solutions and providing personalized service support". As a Dell Authorized Solution Provider, we also provide hardware product solutions associated with the company's services.
 

Contact Us

Address: No. 2, Jingwu Road, Zhengzhou City, Henan Province

Phone: 0086-371-63520088 

QQ:76257322

Website: 800188.com

E-mail: This email address is being protected from spambots. You need JavaScript enabled to view it.