首页 > 数据库 >awk打印除某数据项/某列数/某些列数之外其它列数据的实现以及Twemproxy(redis集群方案)的各配置参数详解

awk打印除某数据项/某列数/某些列数之外其它列数据的实现以及Twemproxy(redis集群方案)的各配置参数详解

时间:2024-08-24 13:29:19浏览次数:8  
标签:hash Twemproxy 某列数 redis server 123213 awk kkk print

一、awk打印除某数据项/某列数/某些列数之外其它列数据的实现

        偶尔碰到一个需求,我需要使用awk打印数据,但是只需要打印某列之后的其它列,比如我只要第2列及之后的所有数据,如何实现呢?实际很简单:

#将$1置成空,然后打印即可
awk '{ $1="";print}' filepath
awk '{ $1="";print $0}' filepath

        这个能成功按我们的想法执行,说明awk命令中$0并不是在拿到原始数据之后进行行处理时的一行内容,而是最后将各$列相互拼接在一起的$0。而在此之前我一直在脑海里认为$0是awk一开始进行行处理时的原始整行内容,并且不会变化。所以这个命令的执行说明我原来的想法是错的,$0会随着你更改任何一项$列而进行变化。

[online@USER ~]$ cat some.log 
year    numbers others
2018    19281   kkk     0764 onlyline
2019    123213  kjkl    0987
[online@USER ~]$ awk '{$1="";print}' some.log 
 numbers others
 19281 kkk 0764 onlyline
 123213 kjkl 0987
[online@USER ~]$ awk '{print $0;$1="";print $0;}' some.log 
year    numbers others
 numbers others
2018    19281   kkk     0764 onlyline
 19281 kkk 0764 onlyline
2019    123213  kjkl    0987
 123213 kjkl 0987
[online@USER ~]$ awk '{print $0;$1="";print $0;$5="yes";print}' some.log       
year    numbers others
 numbers others
 numbers others  yes
2018    19281   kkk     0764 onlyline
 19281 kkk 0764 onlyline
 19281 kkk 0764 yes
2019    123213  kjkl    0987
 123213 kjkl 0987
 123213 kjkl 0987 yes

        但有一点,即便设置了$1为空,但是在打印的结果中,$1和$2之间的分隔符(这里是空格)依然是存在的。

举一反三地看下以下几种情况:

  1. 如果我们不要最后一项的话怎么实现呢?也一样很简单,使用NF进行置空。
  2. 如果我们从某一项起向后几项都不需要时(需要连续去除多列)再打印怎么实现?使用for正循环进行数据置空。
  3. 如果每天的列数可能不一样,我们需要去掉最后的三列怎么实现?使用for反向循环,从NF起进行处理即可。

以上各项示例如下:

[online@USER ~]$ awk '{$NF="";print $0;}' some.log          
year numbers 
2018 19281 kkk 0764 
2019 123213 kjkl 
[online@USER ~]$ awk '{print $0;}' some.log       
year    numbers others
2018    19281   kkk     0764 onlyline
2019    123213  kjkl    0987
[online@USER ~]$ awk '{ for(i=1; i<=2; i++){ $i="" }; print $0 }' some.log
  others
  kkk 0764 onlyline
  kjkl 0987
#如下,可能开始看不好理解,其作用就是删除每行的最后三列,所以第一行为空行。
[online@USER ~]$ awk '{ for(i=0; i<=2; i++){ $(NF-i)="" }; print $0 }' some.log 
  
2018 19281   
2019  

 二、Twemproxy(redis集群方案)的各配置参数详解

这是一个简单的Twemproxy的配置文件nutcracker.yml内容 publish:November 2, 2018 -Friday:

#Twemproxy的配置文件nutcracker.yml简化内容如下:
[root@123 twemproxy]# vim nutcracker.yml
localRedis:
  listen: 127.0.0.1:22122
  hash: fnv1a_64
  hash_tag: "{}"
  distribution: ketama
  auto_eject_hosts: false
  timeout: 400
  redis: true
  servers:
   - 127.0.0.1:6379:1 server1
   - 127.0.0.1:6380:1 server2
   - 127.0.0.1:6381:1 server3

        上面的Twemproxy(redis集群方案)的配置内容参数详解:

listen: 监听地址和端口(name:port 或者ip:port),也可以用sock文件(/var/run/nutcracker.sock)的绝对路径
hash:#hash函数的名字:

     one_at_a_time
     md5
     crc16
     crc32 (crc32 implementation compatible with libmemcached)
     crc32a (correct crc32 implementation as per the spec)
     fnv1_64
     fnv1a_64(默认配置)
     fnv1_32
     fnv1a_32
     hsieh
     murmur
     jenkins

hash_tag:#两个字符组成的字符串(比如{}),指定key的部分做hash运算。例如两个key aaaa,xxx:{aaaa}:xxxx;指定{}中间部分做hash运算他们将被分配到同一server(找不到的场景使用完整的key做hash)
distribution: #数据分配方式:

     ketama:#一致性hash算法,根据server构造hash ring,为每个阶段分配hash范围它的优点是一个节点down后,整个集群re-hash,有部分key-range会跟之前的key-range重合,所以它只能合适做单纯的cache
     modula:#根据key做hash值取模,根据结果分配到对应的server这种方式如果集群做re-hash,所有的key值都会目标错乱
     random:#不管key值的hash结果是啥,随机选取一个server作为操作目标适合只读场景,需要配合数据加载?

timeout:#单位毫秒,等待到server建立连接的时间或者接收server相应过程的等待时间,默认是无限期等待,等待超时报错:SERVER_ERROR Connection timed out
backlog:#TCP backlog队列,默认512
preconnect: #在进程启动的时候,twemproxy是否需要预连接到所有的server,默认值是false
redis:#使用redis还是memcached协议,默认false(即memcached)
redis_auth: #连接redisserver的验证
server_connections:#每一个server能够打开的最大连接值,默认最大是1
auto_eject_host: #当连接一个server失败次数超过server_failure_limit值时,是否把这个server驱逐出集群,默认是false
server_retry_timeout:#单位毫秒,当auto_eject_host打开后,重试被临时驱逐的server之前的等待时间
server_failure_limit: #当auto_eject_host打开后,驱逐一个server之前重试次数
servers: #serverpool中包含的的server的地址、端口和权重的列表(name:port:weight or ip:port:weight)

标签:hash,Twemproxy,某列数,redis,server,123213,awk,kkk,print
From: https://blog.csdn.net/weixin_47792780/article/details/141373569

相关文章

  • [Redis]消息队列
    Redis如何实现消息队列1、使用ListList最为简单和直接,主要通过lpush、rpop存储和读取消息队列的(先进先出)ruby代码解读复制代码127.0.0.1:6379>lpushmq"firstMsg"#推送消息firstMsg(integer)1127.0.0.1:6379>lpushmq"secondMsg"#推送消息secondMsg(integer)212......
  • Linux下Redis的安装和部署(哨兵模式)
    1.哨兵模式配置文件redis服务 redis端口 哨兵端口 主从redis-1 7001 27001 主节点redis-2 7002 27002 从节点redis-3 7003 27003 从节点下载Rediscurl-Ohttp://download.redis.io/releases/redis-6.0.6.tar.gz解压Redistarxzvfredis-6.0.6.tar.gz进入redis-6.0.6目......
  • python——redis
    1.什么是Redis?Redis是一种高性能的键值存储数据库,它不仅可以存储字符串,还可以存储复杂的数据结构如列表、集合、哈希等。Redis常用于缓存、会话管理、实时数据处理等场景。2.环境准备在使用Redis之前,需要安装Redis服务器和Redis的Python客户端库。2.1安装......
  • docker对的tomcat、mysql、redis、nginx的安装
    本章篇章主要讲解了docker对常用软件的安装说明总体步骤:搜索镜像、拉取镜像、查看镜像、启动镜像、停止容器、移除容器tomcatdockerseachertomcat//也可以在dockerhub上面查找tomcat镜像dockerpulltomcat从dockerhub上拉取tomcat镜像到本地dockerimages//查看是否......
  • Redis为什么会阻塞
    Redis的一些阻塞点BigKey删除,删除数据库,AOF日志同步聚合操作,全量查询操作,从库读取RDB文件。其中删除BigKey,AOF日志,删除数据库可以异步执行。聚合操作,全量查询,从库读取RDB文件如果过大的话都是会造成阻塞的。CPU也会影响RedisCPU分为多个物理核,一个物理核分为两个逻辑核。......
  • Redis实战
    Redis的String类型有什么缺点在花费内存方面,String花费的内存很多。如果存储的是64位有符号整数的话,就是一个8字节Long类型整数。如果是包含字符的话,就会用SDS,也就是简单字符串来存储,SDS中会把存储的数据最后加一个\0,还会存储使用的buf的长度,实际分配的buf的长度。不仅如此,有......
  • 高效缓存策略——.NET Core 中基于 Redis 的分布式缓存实现
    引言在构建高性能的应用程序时,缓存是不可或缺的技术之一。通过缓存,我们能够显著减少数据库的压力、提升应用的响应速度。而在分布式系统中,分布式缓存则成为了处理高并发和大数据量的理想选择。本文将以Redis为例,介绍如何在.NETCore中实现分布式缓存,帮助开发者打造高效......
  • Redis学习(一)
    1.通用命令keys*delk1existsk1expipek1ttlk12.String类型String类型的常见命令setk1v1 添加键值对getk1v1 获得键值对对应的值msetk1v1k2v2 一次性设置多个值mgetk1k2k3 一次性获取多个键值对的值incrk1 让k1自增incrbyk12 按步长2自增......
  • 浅谈Redis(一)
    浅谈Redis(一)文章目录浅谈Redis(一)Redis的特点Redis线程模型Redis单线程为什么快Redis持久化方案Redis缓存淘汰策略Redis缓存穿透、击穿和雪崩区别和解决方案Redis是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。Redis支持多种数据结构,比如str......
  • 第四章 Python操作redis(操作案例)
    一、python对redis基本操作(1)连接redis#方式1importredisr=redis.Redis(host='127.0.0.1',port=6379)r.set('foo','Bar')print(r.get('foo'))#方式2importredispool=redis.ConnectionPool(host='127.0.0.1',po......