ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux-awk

2020-06-08 12:52:01  阅读:272  来源: 互联网

标签:bin sbin awk linux linecontent root col row


awk -h

[root@node0 tmp]# awk -h

Usage: awk [POSIX or GNU style options] -f progfile [--] file ... 从文件中读取程序

Usage: awk [POSIX or GNU style options] [--] 'program' file ... 命令行直接写程序

POSIX options:        GNU long options:

    -f progfile        --file=progfile 从指定的文件中读取程序

    -F fs            --field-separator=fs 指定字段分隔符,默认是一个或多个空格

    -v var=val        --assign=var=val 定义gawk程序中的变量及默认值

    -m[fr] val

    -O            --optimize

    -W compat        --compat

    -W copyleft        --copyleft

    -W copyright        --copyright

    -W dump-variables[=file]    --dump-variables[=file]

    -W exec=file        --exec=file

    -W gen-po        --gen-po

    -W help            --help

    -W lint[=fatal]        --lint[=fatal]

    -W lint-old        --lint-old

    -W non-decimal-data    --non-decimal-data

    -W profile[=file]    --profile[=file]

    -W posix        --posix

    -W re-interval        --re-interval

    -W source=program-text    --source=program-text

    -W traditional        --traditional

    -W usage        --usage

    -W use-lc-numeric    --use-lc-numeric

    -W version        --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

示例

1、从命令行读取程序脚本

1.1、一条命令

gawk程序脚本用一对大括号来定义。你必须将脚本命令放到两个大括号中{ }

由于gawk命令行假定脚本是单个文本字符串,还必须将脚本放到单引号中 ' '

 

数据字段变量:

$0代表整个文本行

$1代表文本行中分隔后的第1个数据字段

$n代表文本行中分隔后的第n个数据字段

在文本行中,每个数据字段都是通过字段分隔符划分的。默认的分隔符是任意的空白字符(空格或制表符)

 

[root@node0 ~]# cat /etc/passwd |head -n 5

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@node0 ~]# cat /etc/passwd |head -n 5|awk -F ':' '{print $1}' #以:为分隔符,打印第1列

[root@node0 ~]# cat /etc/passwd |head -n 5|awk -F ':' '{print $1"\t"$7}' #以:为分隔符,打印第1列和第7列

[root@node0 ~]# cat /etc/passwd |head -n 5|awk -F ':' 'BEGIN {print "user\tshell"} {print $1"\t"$7} END {print "ending"}' 添加BEGIN和END脚本

将上例中的program写到文件中,BEGIN和END要和{ 在一行

[root@node0 ~]# cat /etc/passwd |head -n 5|awk -F ':' -f format

内置变量

FILENAME awk浏览的文件名

FNR 浏览文件的记录数

FS 设置输入域分隔符,等价于命令行 -F选项

NF 分隔后的列数

NR 浏览的行数

建议把FS写到BEGIN里,不然容易出问题

[root@node0 ~]# cat /etc/passwd |head -n 5|awk '{FS=":"; print "row:"NR ",col:" NF",linecontent:"$0}'

row:1,col:1,linecontent:root:x:0:0:root:/root:/bin/bash

row:2,col:7,linecontent:bin:x:1:1:bin:/bin:/sbin/nologin

row:3,col:7,linecontent:daemon:x:2:2:daemon:/sbin:/sbin/nologin

row:4,col:7,linecontent:adm:x:3:4:adm:/var/adm:/sbin/nologin

row:5,col:7,linecontent:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@node0 ~]# cat /etc/passwd |head -n 5|awk 'BEGIN {FS=":"} {print "row:"NR ",col:" NF",linecontent:"$0}'

row:1,col:7,linecontent:root:x:0:0:root:/root:/bin/bash

row:2,col:7,linecontent:bin:x:1:1:bin:/bin:/sbin/nologin

row:3,col:7,linecontent:daemon:x:2:2:daemon:/sbin:/sbin/nologin

row:4,col:7,linecontent:adm:x:3:4:adm:/var/adm:/sbin/nologin

row:5,col:7,linecontent:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

标签:bin,sbin,awk,linux,linecontent,root,col,row
来源: https://www.cnblogs.com/jeancheng/p/13065041.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有