来自维基百科,“分隔数据使用特定字符(分隔符)来分隔其值。大多数数据库和电子表格程序都能够以分隔格式读取或保存数据。”。
那么如何在 Linux shell 提示符下处理分隔文件呢?
使用 cut 处理分隔文件
cut 命令打印每个文件(或变量)中选定的行部分,即它从文件的每行中删除部分:
例如 /etc/passwd 文件使用字符:分隔符分隔。
要打印所有用户的列表,请在 shell 提示符下键入以下命令:
$ cut -d: -f1 /etc/passwd
输出:
根 你 我 维维克 httpd
在哪里,
- -d:指定使用字符 : 作为分隔符
- -f1:打印第一个字段,如果要打印第二个字段,请使用 -f2 等等......
现在考虑可变服务。让我们使用 cut 命令打印邮件单词:
$ service="http mail ssh"
$ echo $service | cut -d' ' -f2
邮件
请注意,空格用作分隔符。
使用 awk 处理分隔文件
您还可以使用 awk 命令达到相同目的:
$ awk -F':' '{ print $1 }' /etc/passwd
输出:
根 你 我 维维克 httpd
在哪里,
- -F: – 使用 : 作为输入字段分隔符的 fs(分隔符)
- print $1 – 打印第一个字段,如果要打印第二个字段,请使用 $2 等等
使用 cut 或 awk 处理分隔文件是系统管理员的一项基本技能。假设您想使用 shell 脚本(下载链接)了解特定服务是否处于活动状态:
#!/bin/bash 端口= “22 80 25” 服务= “SSH WEB MAIL” c = 1 echo "运行服务状态:" /bin/ netstat - tulpn | grep - vE '^Active|Proto' | grep - vE '^Active|Proto' | while read LINE do # 获取活动端口名称并使用 : 作为分隔符 t = $ ( echo $LINE | awk '{ print $4}' | cut - d : - f2 ) [ "$t" == "" ] & & t = - 1 | | : # 从 $services 中获取服务名称并 : 作为分隔符 sname = $ ( echo $service | cut - d ' ' - f $c ) sstatus = "$sname: No" # 现在比较端口for i in $ports do if [ $i - eq $t ] ; 然后 sstatus = "$sname: 好的" 菲 完毕 # 显示服务状态为 OK 或 NO echo "$sstatus" #请下一个服务 c = $ ( expr $c + 1 ) # 中断 3 个服务 [ $c - ge 4 ] & & break | | : 完毕
执行脚本:
$ chmod +x script.sh
$ ./script.sh
输出:
SSH:是的 网络:无 邮件:是的
正如您在上面看到的,脚本使用 cut 和 awk 从 shell 变量和命令输出中提取一个或多个连续或不连续的字段。下载完整的工作脚本,向管理员用户发送电子邮件警报。