记录: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日