-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【3.23】awk参考 #83
Comments
awk常见的内建变量(可直接使用) FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同 NF∶ 当前处理的行的字段个数 NR∶ 当前处理的行的行号(序数) $0∶当前处理的行的整行内容 $n∶ 当前处理行的第n个字段(第n列) FILENAME∶ 被处理的文件名 RS∶ 行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’ FNR:awk当前读取的记录数,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会) NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件 |
awk与getline (1)、当getline左右无重定向符“<”或“|”时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量var或$0;应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的 (2)、当getline左右有重定向符“<”或“|”时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行 |
显示第xx行的第yy列的一个字符sed -n 'xx,xxp' file | awk '{print substr($0,yy,1);}' 修改第xx行的第yy列的一个字符Chr,并保存为新文件awk -F "" 'BEGIN { OFS="" }{if(NR == xx) for(i=yy;i<=yy;i++) {$i="Chr";} print }' file > newfile file内容: 替换第9个字符到第19个字符之间的abc为xyz: awk -F "" 'BEGIN { OFS="" } {for(i=9;i<=19;i++) if(i=="a" && 首先通过设定FS,将每个字符看成一个域然后通过for循环进行遍历,经过判断找出abc这样连续的三个字符后进行重新赋值,最后输出,记住,如果用sub、gsub替换,请分析好替换的内容. REF: |
Linux中awk的gsub函数用法 问题:echo "a b c 2011-11-22 a:d" | awk '$4=gsub(/-/,"",$4)'为啥 输出后 2011-11-22 变成 2 了? 解答: 看另一种情况,只是替换的话~ [root@sor-sys config]# echo "a b c 2011-11-22 a:d" | awk 'gsub(/-/,"",$4)' 二。实例详解 下面我们来总结一下这个gsub的用法: 有一个文本文件data.test的内容如下: 0001|20081223efskjfdj|EREADFASDLKJCV 以'|'为分隔, 现要将第二个域字母前的数字去掉,其他地方都不变, 输出为: 解法: awk -F '|' '{sub(/[0-9]+/,"",$2);print $0}' data.test 三。sub和gsub的区别 sub匹配第一次出现的符合模式的字符串,相当于 sed 's//' awk的sub函数用法: 实例: gsub函数作用如sub,但它在整个文档中进行匹配。 实例: 只有当记录中的域有改变的时候 ,指定0FS变量才有用, 如果记录中的域无变化, 指定OFS产生不了实际效果。 awk -F'|' -v OFS='|' '{ gsub(/[0-9]/, "", $3); print $0; }' data.txt 将把第三个域中所有数字都去掉。 |
https://www.cnblogs.com/JC123/p/15073361.html
The text was updated successfully, but these errors were encountered: