awk中的输入分隔符 |
您所在的位置:网站首页 › 单个制表符怎么设置 › awk中的输入分隔符 |
awk或gawk中可以通过-F参数或者内置变量FS指定输入内容的分隔符,默认的分隔符为空格、制表符、换行符等空白字符。 下面详细介绍下指定不同类型的字符作为分隔符时的使用方法。 1. 使用默认分隔符或指定单个字符作为分隔符若要将一个特殊字符,例如\、、(、)、\n、\t、&、;、'、"、管道符、空格或反引号等在shell中有特殊意义的字符作为分隔符,那么必须将其使用双引号或者单引号包裹起来 例如下面这个例子,指定>为字段分隔符,如果不使用单引号或双引号包裹,将会报错,因为>被当作了重定向的命令: $ echo '100>89>43'| awk -F > '{ print $1,$2,$3}' awk: field separator FS is empty awk: no program given使用单引号或者双引号将其包裹后,则可以正确输出 $ echo '100>89>43'| awk -F ">" '{ print $1,$2,$3}' 100 89 43例如,对于下面这个文本文档list.txt,其内容如下,每行中的各个字段之间使用制表符分隔: jason 33 male cherry 24 female alex 27 male 要打印出每一行的姓名,可是使用不加-F参数的awk命令或者指定分隔符为\t或空格 $ awk '{ print $1}' list.txt jason cherry alex $ $ awk -F '\t' '{ print $1}' list.txt jason cherry alex $ $ awk -F " " '{ print $1}' list.txt jason cherry alex 2. 指定多个字符作为分隔符例如,想要将如下字符串中的’abc’这个字符串指定为一个分隔符 123abc456abc789abc 可以使用如下的命令 $ echo 123abc456abc789abc|awk -F 'abc' '{ print $1,$2,$3}' 123 456 789如果指定多个字符作为一个整体作为一个分隔符,那么,其中每出现一个如下的特殊字符,就需要使用两个或者两个以上的\对该特殊字符进行转义: $、^、*、(、)、[、]、?、.、| 例如,对于如下的字符串 123$.456$.789 要将$.作为一个分隔符,如果不对$进行转义,那么将得不到想要的结果 $ echo '123$.456$.789'|awk -F '$.' '{print $1,$2,$3}' 123$.456$.789要得到正确的结果,可以使用如下的命令 $ echo '123$.456$.789'|awk -F '\\$.' '{print $1,$2,$3}' 123 456 789如果将上例中的点号.换成另外一个特殊字符,例如管道符\,如下所示: 123$|456$|789 如果要只打印出123, 456, 789,那么需要对其中的$和|都使用两个或两个以上的\进行转义 $ echo '123$|456$|789'|awk -F '\\$\\|' '{print $1,$2,$3}' 123 456 789 3. 同时指定多个分隔符有时候,可能需要使用多个不同的分隔符一次性将文本中行的内容进行分隔,例如下面这个文档ssh.txt ssh:[email protected] ssh:[email protected] ssh:[email protected] 我们可以使用两次awk -F命令,每次分别指定一个分隔符来进行操作,但是这样太麻烦,还有更简单的方法,即一次指定多个分隔符。 要一次指定多个分隔符,需要将分隔符用中括号[]包裹起来,如果多个分隔符中有至少一个特殊字符,那么还需要在中括号外加上双引号或者单引号,并且使用两个或两个以上的\将其进行转义 $、^、(、)、[、]、?、.、| 要对上述的文件内容进行操作,可以使用如下命令 $ awk -F [:@] '{ print $2, $3 }' ssh.txt user1 192.168.1.10 user2 192.168.1.11 user3 192.168.1.12将上述文件中的冒号:和@换为^和|,文件内容变为 ssh^user1|192.168.1.10 ssh:user2|192.168.1.11 ssh:user3|192.168.1.12 如果要打印出同样的内容,需要使用如下的命令 $ awk -F '[\\^\\|]' '{ print $1,$2,$3}' ssh.txt user1 192.168.1.10 user2 192.168.1.11 user3 192.168.1.12对于内容如下所示的文本文件name.txt george[walker]bush william[jefferson]clinton 如果要打印出由分隔符[和]分隔的三段数据,即可以分别使用两个或两个以上的\对[和]进行转义,如下所示: $ awk -F '[\\[\\]]' '{ print $1,$2,$3}' name.txt george walker bush william jefferson clinton也可以使用如下的方法 $ awk -F '[][]' '{ print $1,$2,$3}' name.txt george walker bush william jefferson clinton |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |