xChar

统计行数

wc -l

查看docker服务日志

docker ps | grep template | awk '{print $1}' | xargs  docker logs -f --tail=100

awk 表述行取值

xargs 表示参数传入

awk列过滤的其他案例

第一列为d2d6812cb25a,第二列以gomain开头,format结尾,然后打印整条数据

docker ps | awk '$1 == "d2d6812cb25a" && $2 ~ /^g.*t$/  {print $0}'

其中$1如果比较的是数字,不加引号,字符串需要加引号

单个*不能表示字符省略,需要配合点号

awk本身是一种编程语言

docker ps | awk 'BEGIN {line = 0}  {line += 1} END {print line} '

共计有40条记录

过滤出g开头的

docker ps | awk 'BEGIN {line = 0} $2 ~ /^g.*/ {line += 1} END {print line} '

共计33条记录

备注 BEGIN 和 END 必须大写

bc工具

paste命令可用于合并文件的列

打印下序列 0~40

docker ps | awk 'BEGIN {i = 0} {print i++} END {print i}'

使用paste拼接

docker ps | awk 'BEGIN {i = 0} {print i++} END {print i}' | paste -sd+

效果为:

0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40

s是串行 --serial

d是用指定的间隔字符取代跳格字符,上例中使用的是加号

上述命令有以下几个变种

# 1
docker ps | awk 'BEGIN {i = 0} {print i++} END {print i}' | paste -sd +
# 2
docker ps | awk 'BEGIN {i = 0} {print i++} END {print i}' | paste -s -d +
# 3
docker ps | awk 'BEGIN {i = 0} {print i++} END {print i}' | paste -d + -s

结果一致

使用bc计算以上的值

docker ps | awk 'BEGIN {i = 0} {print i++} END {print i}' | paste -sd+ | bc -l

l表示使用标准的数学库

-l, --mathlib
Define the standard math library.

其实不加 l 也能计算

docker ps | awk 'BEGIN {i = 0} {print i++} END {print i}' | paste -sd+ | bc
Loading comments...