`
swordinhand
  • 浏览: 308734 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

AWK入门1

阅读更多
    基本就是翻译一下http://www.theunixschool.com/p/awk-sed.html里面的内容
    首先看语法,awk的命令格式是 awk 'pattern{action}' file,表示awk对文件中所有符合pattern的hang执行action操作,如果pattern为空,则默认为对文件中的每一行进行操作,如果action为空,则默认为打印这一行。但是如果pattern和action都为空,那什么操作都不会做。
    其次看特殊变量,awk自动的把每行都分成若干列,默认的分隔符是空格和tab,可以通过-F指令来指定其他的分隔符,分割出来的列用$1, $2……来代表,$0则表示整行,还有个特殊符号NR表示行号。下面看几个例子:
    先创建一个用空格和tab分隔的文件file1
引用
$ cat file1
FirstName LastName Age
John  Banks 42
Neil  Santos    25
Sara Young 17 

    打印第二列的姓
引用
$ awk '{print $2}' file1
LastName
Banks
Santos
Young

    不想打印第一行的LastName这个提示
引用
$ awk 'NR!=1{print $2}' file1
Banks
Santos
Young

    打印整个文件
引用
$ awk '1' file1
FirstName LastName Age
John  Banks 42
Neil  Santos    25
Sara Young 17 

或者用另一种语法
引用
$ awk '{print $0}' file1
FirstName LastName Age
John  Banks 42
Neil  Santos    25
Sara Young 17 


现在创建一个用逗号做分隔符的文件,也就是csv格式的文件
引用
cat file2
First Name, Last Name, age
Barack,Obama,50
字段1,字段2,44


打印第二个字段
引用
$ awk -F, '{print $2}' file2
Last Name
Obama
字段2

还有另一种写法
引用
$ awk  '{print $2}' FS=, file2
Last Name
Obama
字段2

指定输出字段的分隔符
引用
$ awk  '{print $1, $3}' FS=, OFS="|" file2
First Name| age
Barack|50
字段1|44


    要注意的是,如果使用-F指定分隔符,那么要放在patter和action之前,如果使用FS指定分隔符,要放在patter和action之后,如果放错了会提示语法错误。FS和OFS所用的分隔符,在不会引起歧义或者转义的情况下,可以不加双引号。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics