linux %o,linux 命令详解 六

注:假设列表中的变脸值为x = A, y = 15, z = 2.3, $1 = "Bob Smith"/> echo "Linux" | awk '{printf "|%-15s|\n", $1}'# %-15s表示保留15个字符的空间,同时左对齐。|Linux          |/> echo "Linux" | awk '{printf "|%15s|\n", $1}'# %-15s表示保留15个字符的空间,同时右对齐。|          Linux|

#%8d表示数字右对齐,保留8个字符的空间。/> awk '{printf "The name is %-15s ID is %8d\n", $1,$3}' employeesThe name is Tom             ID is     4424

The name is Mary            ID is     5346

The name is Sally            ID is     1654

The name is Billy             ID is     16833.  awk中的记录和域:awk中默认的记录分隔符是回车,保存在其内建变量ORS和RS中。$0变量是指整条记录。/> awk '{print $0}' employees#这等同于print的默认行为。Tom Jones        4424    5/12/66         543354

Mary Adams      5346    11/4/63         28765

Sally Chang       1654    7/22/54         650000

Billy Black         1683    9/23/44         336500变量NR(Number of Record),记录每条记录的编号。/> awk '{print NR, $0}' employees1 Tom Jones        4424    5/12/66         543354

2 Mary Adams      5346    11/4/63         28765

3 Sally Chang       1654    7/22/54         650000

4 Billy Black         1683    9/23/44         336500变量NF(Number of Field),记录当前记录有多少域。/> awk '{print $0,NF}' employeesTom Jones        4424    5/12/66          543354   5

Mary Adams      5346    11/4/63         28765     5

Sally Chang      1654    7/22/54          650000   5

Billy Black        1683     9/23/44         336500    5

#根据employees生成employees2。sed的用法可以参考上一篇blog。/> sed 's/[[:space:]]\+\([0-9]\)/:\1/g;w employees2' employees/> cat employeesTom Jones:4424:5/12/66:543354

Mary Adams:5346:11/4/63:28765

Sally Chang:1654:7/22/54:650000

Billy Black:1683:9/23/44:336500/> awk -F: '/Tom Jones/{print $1,$2}' employees2#这里-F选项后面的字符表示分隔符。Tom Jones 4424变量OFS(Output Field Seperator)表示输出字段间的分隔符,缺省是空格。/>  awk -F: '{OFS = "?"};  /Tom/{print $1,$2 }' employees2#在输出时,域字段间的分隔符已经是?(问号)了Tom Jones?4424对于awk而言,其模式部分将控制这动作部分的输入,只有符合模式条件的记录才可以交由动作部分基础处理,而模式部分不仅可以写成正则表达式(如上面的例子),awk还支持条件表达式,如:/> awk '$3 < 4000 {print}' employeesSally Chang     1654    7/22/54         650000

Billy Black       1683    9/23/44         336500在花括号内,用分号分隔的语句称为动作。如果模式在动作前面,模式将决定什么时候发出动作。动作可以是一个语句或是一组语句。语句之间用分号分隔,也可以用换行符,如:pattern { action statement; action statement; etc. } orpattern {action statementaction statement}模式和动作一般是捆绑在一起的。需要注意的是,动作是花括号内的语句。模式控制的动作是从第一个左花括号开始到第一个右花括号结束,如下:/> awk '$3 < 4000 && /Sally/ {print}' employeesSally Chang     1654    7/22/54         6500004.匹配操作符:" ~ "用来在记录或者域内匹配正则表达式。/> awk '$1 ~ /[Bb]ill/' employees#显示所有第一个域匹配Bill或bill的行。Billy Black     1683    9/23/44         336500/> awk '$1 !~ /[Bb]ill/' employees#显示所有第一个域不匹配Bill或bill的行,其中!~表示不匹配的意思。Tom Jones        4424    5/12/66         543354

Mary Adams      5346    11/4/63         28765

Sally Chang       1654    7/22/54         6500005.  awk的基本应用实例:/> cat testfilenorthwest     NW        Charles Main            3.0        .98        3        34

western        WE        Sharon Gray            5.3        .97        5        23

southwest     SW        Lewis Dalsass          2.7        .8          2        18

southern       SO        Suan Chin                5.1        .95        4        15

southeast      SE        Patricia Hemenway    4.0        .7          4        17

eastern         EA        TB Savage                4.4        .84        5        20

northeast      NE        AM Main Jr.               5.1        .94        3        13

north            NO        Margot Weber          4.5        .89        5        9

central          CT        Ann Stephens           5.7        .94        5        13/> awk '/^north/' testfile#打印所有以north开头的行。northwest      NW      Charles Main     3.0     .98     3       34

northeast       NE      AM Main Jr.        5.1     .94     3       13

north             NO      Margot Weber   4.5     .89     5       9/> awk '/^(no|so)/' testfile#打印所有以so和no开头的行。northwest       NW      Charles Main                3.0     .98      3       34

southwest       SW      Lewis Dalsass              2.7     .8       2       18

southern         SO      Suan Chin                    5.1     .95     4       15

southeast        SE      Patricia Hemenway        4.0     .7       4       17

northeast        NE      AM Main Jr.                   5.1     .94     3       13

north              NO      Margot Weber              4.5     .89     5       9/> awk '$5 ~ /\.[7-9]+/' testfile#第五个域字段匹配包含.(点),后面是7-9的数字。southwest       SW      Lewis Dalsass            2.7     .8      2       18

central             CT      Ann Stephens            5.7     .94     5       13/> awk '$8 ~ /[0-9][0-9]$/{print $8}' testfile#第八个域以两个数字结束的打印。34

23

18

15

17

20

13

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值