记录:353
场景:在CentOS 7.9操作系统上,使用awk文本处理工具处理文本;使用awk、cat和grep搭配使用处理文本;使用awk直接处理文本;使用shell脚本调用awk脚本处理文本。
版本:
操作系统:CentOS 7.9
名词:
awk:一个优良的文本处理工具,Linux及Unix环境中功能最强大的数据处理引擎之一。
awk: 一种编程语言,用于在 linux/unix 下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。
1.命令应用
1.1awk处理第1个文本(默认空格分割)
(1)命令
命令:cat /home/work/aintro.txt | grep -vE "#|^$"| awk '{print $1,$2,$3,$4}'
(2)解析
使用cat命令读取文件内容。
使用grep命令匹配内容,grep -vE "#|^$",是表示匹配不是以#号开头的字符串。-v,是反向匹配;-E是扩展正则表达式;"#|^$",正则表达式是匹配以#号开头的字符串;"#"是以#号开头的字符串,"^"是匹配字符串开头,"$"是匹配字符串结尾。'{print $1,$2,$3,$4}'中的两个单引号是引用代码块。print是输出。
使用awk逐行处理文本,默认使用空格分割字符串。"$1,$2,$3,$4"中$1是代表取分割后第1个字符,$2是取分割后第2个字符,逐级类推。如果是$0就打印出整行内容。
(3)文本内容和文本处理结果
1.2awk处理第2个文本(-F指定分割符号)
(1)命令
命令:cat /home/work/bintro.txt | grep -vE "#|^$"| awk -F":" '{print $1,$2,$3,$4}'
命令:cat /home/work/bintro.txt | grep -vE "#|^$"| awk -F: '{print $1,$2,$3,$4}'
(2)解析
使用cat命令读取文件内容。
使用grep命令匹配内容。
使用awk逐行处理文本,-F":"或-F:,指定文本的分割符号为":"号。
(3)文本内容和文本处理结果
1.3awk处理第3个文本
(1)命令
命令:awk -F":" '{print $1,$2,$3,$4}' /home/work/cintro.txt
命令:awk -F: '{print $1,$2,$3,$4}' /home/work/cintro.txt
(2)解析
使用awk逐行处理文本,-F":"或-F:,指定文本的分割符号为":"号。
(3)文本内容和文本处理结果
1.4awk处理第4个文本
(1)命令
命令:awk -F: '{print $1,$2,$3,$4}' /home/work/dintro.txt >>/home/work/dintro-result.txt
(2)解析
使用awk逐行处理文本,-F:,指定文本的分割符号为":"号。处理/home/work/dintro.txt文件内容;结果输出到/home/work/dintro-result.txt文件。
(3)文本内容和文本处理结果
1.5awk处理第5个文本
(1)命令
命令:awk -f /home/work/process.awk /home/work/eintro.txt >>/home/work/eintro-result.txt
(2)解析
使用awk逐行处理文本,-F:,指定文本的分割符号为":"号。
-f /home/work/process.awk,-f指定使用process.awk文件的脚本。
处理/home/work/eintro.txt文件内容;结果输出到/home/work/eintro-result.txt文件。
(3)文本内容和文本处理结果
1.6awk处理第6个文本
(1)命令
执行shell命令:/home/work/process.sh
(2)解析
脚本调用逻辑:
执行shell脚本/home/work/process.sh;
shell脚本调用/home/work/process.awk脚本;
awk -f处理/home/work/fintro.txt文件内容;
>>将处理结果输出到/home/work/fintro-result.txt文件。
(3)文本内容和文本处理结果
图片版:
文字版:
//1. fintro.txt文本
Zhejiang:is:a:province:in:China.
Hangzhou:is:a:city:in:Zj.
Xihu:is:a:district:in:Hz.
//2. process.awk脚本
BEGIN{
FS=":"
}
{print $1,$2,$3,$4}
// 3. process.sh脚本
#!/bin/bash
SRC_FILE=/home/work/fintro.txt
RESULT_FILE=/home/work/fintro-result.txt
AWK_SCRIPT_FILE=/home/work/process.awk
awk -f $AWK_SCRIPT_FILE $SRC_FILE >> $RESULT_FILE
// 4. fintro-result.txt处理结果文本
Zhejiang is a province
Hangzhou is a city
Xihu is a district
2.命令帮助手册
命令:awk --help
解析:查看awk支持的全部命令和选项,在实际工作中,查看这个手册应该是必备之选。
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options: GNU long options: (standard)
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
Short options: GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-e 'program-text' --source='program-text'
-E file --exec=file
-g --gen-pot
-h --help
-L [fatal] --lint[=fatal]
-n --non-decimal-data
-N --use-lc-numeric
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-S --sandbox
-t --lint-old
-V --version
To report bugs, see node `Bugs' in `gawk.info', which is
section `Reporting Problems and Bugs' in the printed version.
gawk is a pattern scanning and processing language.
By default it reads standard input and writes standard output.
Examples:
gawk '{ sum += $1 }; END { print sum }' file
gawk -F: '{ print $1 }' /etc/passwd
以上,感谢。
2022年11月29日