Awk随记:修订间差异
来自三线的随记
小无编辑摘要 |
小无编辑摘要 |
||
(未显示同一用户的5个中间版本) | |||
第1行: | 第1行: | ||
=== awk内置字符串函数 === | __FORCETOC__ | ||
<blockquote>awk、grep、sed是linux操作文本的三大利器,合称文本三剑客</blockquote> | |||
===awk内置字符串函数 === | |||
gsub(r,s) 在整个$0中用s替代r | gsub(r,s) 在整个$0中用s替代r | ||
第21行: | 第24行: | ||
<br /> | <br /> | ||
=== awk和Ta的常见变量们 === | ===awk和Ta的常见变量们=== | ||
NR 当前处理行数 | NR 当前处理行数 | ||
第27行: | 第30行: | ||
NF 当前处理行总字段数 | NF 当前处理行总字段数 | ||
=== Example === | ==== 分隔符 ==== | ||
FS:Field Separator,字段分隔符 | |||
OFS:Out of Field Separator,输出字段分隔符<br /> | |||
===Example=== | |||
==== awk排除第一行然后输出 ==== | ====awk排除第一行然后输出==== | ||
awk '{if(NR>1)print $0}' | awk '{if(NR>1)print $0}' | ||
==== 对于多个docker images用一行命令retag然后push到指定registry下的指定namespace ==== | ====对于多个docker images用一行命令retag然后push到指定registry下的指定namespace==== | ||
docker images| awk '/string/{gsub("origin_registry/origin_ns","registry/ns",$0);printf "docker tag "$3" "$1":"$2";docker push "$1":"$2"\n"}'|sh | docker images| awk '/string/{gsub("origin_registry/origin_ns","registry/ns",$0);printf "docker tag "$3" "$1":"$2";docker push "$1":"$2"\n"}'|sh | ||
将string替换成需要筛选过滤的image (可选) | 将string替换成需要筛选过滤的image (可选) | ||
第41行: | 第48行: | ||
执行前可以将最后的 <code>|sh</code> 去掉以debug命令 | 执行前可以将最后的 <code>|sh</code> 去掉以debug命令 | ||
==== 在awk中同时重定向输出 ==== | |||
echo string1234 | awk '{print " contents "$0 >> "demo"}' | |||
在awk中格式化输出 | |||
echo 1 2 3 4 5| awk '{printf "%-30s %-30s %-5s %-5s %s\n",$1,$2,$3,$4,$5}' | |||
[[分类:Linux]] | [[分类:Linux]] | ||
__强显目录__ |
2023年9月26日 (二) 15:55的最新版本
awk、grep、sed是linux操作文本的三大利器,合称文本三剑客
awk内置字符串函数
gsub(r,s) 在整个$0中用s替代r
gsub(r,s,t) 在整个t中用s替代r
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s长度
match(s,r) 测试s是否包含匹配r的字符串
split(s,a,fs) 在fs上将s分成序列a
sprint(fmt,exp) 返回经fmt格式化后的exp
sub(r,s) 用$0中最左边最长的子串代替s
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分 详细说明一下各个函数的使用方法。
awk和Ta的常见变量们
NR 当前处理行数
FNR 在awk处理多个输入文件的时候,在处理完第一个文件后,NR并不会从1开始,而是继续累加,因此就出现了FNR,每当处理一个新文件的时候,FNR就从1开始计数
NF 当前处理行总字段数
分隔符
FS:Field Separator,字段分隔符
OFS:Out of Field Separator,输出字段分隔符
Example
awk排除第一行然后输出
awk '{if(NR>1)print $0}'
对于多个docker images用一行命令retag然后push到指定registry下的指定namespace
docker images| awk '/string/{gsub("origin_registry/origin_ns","registry/ns",$0);printf "docker tag "$3" "$1":"$2";docker push "$1":"$2"\n"}'|sh
将string替换成需要筛选过滤的image (可选)
按需修改"origin_registry/origin_ns" 和 "registry/ns"参数为实际需要执行即可
执行前可以将最后的 |sh
去掉以debug命令
在awk中同时重定向输出
echo string1234 | awk '{print " contents "$0 >> "demo"}'
在awk中格式化输出
echo 1 2 3 4 5| awk '{printf "%-30s %-30s %-5s %-5s %s\n",$1,$2,$3,$4,$5}'