linux中awk命令详解?
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
语法
awk 'script' var=value file(s)
或
awk -f scriptfile var=value file(s)
选项参数说明:
-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v var=value or --asign var=value
赋值一个用户定义变量。
-f scripfile or --file scriptfile
从脚本文件中读取awk命令。
-mf nnn and -mr nnn
对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
-W compact or --compat, -W traditional or --traditional
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
-W copyleft or --copyleft, -W copyright or --copyright
打印简短的版权信息。
-W help or --help, -W usage or --usage
打印全部awk选项和每个选项的简短说明。
-W lint or --lint
打印不能向传统unix平台移植的结构的警告。
-W lint-old or --lint-old
打印关于不能向传统unix平台移植的结构的警告。
-W posix
打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
-W re-interval or --re-inerval
允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式]。
-W source program-text or --source program-text
使用program-text作为源代码,可与-f命令混用。
-W version or --version
打印bug报告信息的版本。
linux的三大杰作?
awk、grep、sed 是 linux 操作文本的三大利器,也是必须掌握的 linux 命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属 awk 功能最强大,但也最复杂。grep 更适合单纯地查找或匹配文本,sed 更适合编辑匹配到的文本,awk 更适合格式化文本,对文本进行较复杂格式处理。
简单概括:
grep:数据查找定位
awk:数据切片
sed:数据修改
gawk使用详解?
gawk是linux下查找替换文本工具。
语法:
awk <options> 'Program' Input-File1 Input-File2 ...
awk -f PROGRAM-FILE <options> Input-File1 Input-File2 ...
关键字:
-f PROGRAM-FILE
--file PROGRAM-FILE
从文件PROGRAM-FILE中读取awk规则源文件内容,代替第一个命令行参数。
按行(或者其他文本单元)搜索文件内容,包含一个匹配模式。当有文本行匹配,awk在此行进行特别的操作。Program告诉awk该去做什么;
gawk将会忽略下面这些关键字后面的换行
, { ? : || && do else
例子介绍
(1)下面的程序打印出data文本最长行的长度
awk '{ if (length($0) > max) max = length($0) }
END { print max }' data
(2)下面的程序打印出至少有一个文字的行,这是个很好删除文件中空行的方法
awk 'NF > 0' data
(3)下面的程序打印出7个0到100的随机数。
awk 'BEGIN { for (i = 1; i <= 7; i++)
print int(101 * rand()) }'
linux如何以第一第二列为名建文件夹?
Linux可以以文件的第一列和第二列为名建立文件夹的,具体命令是:
awk '{print $1,$2}' filename|xargs mkdir -p
linux下有没有对一列数字进行求和的命令?
对第一列数字求和: awk '{a+=$1}END{print a}'
对第二列数字求和:awk '{a+=$2}END{print a}'
通过管道送过去:echo XXX | awk
或者awk 读取文件