Redis-cli 结合awk 批量处理 redis key

awk 是一种功能强大的文本处理工具,它能够对文本数据进行模式扫描、处理和报告。以下是 awk 的一些主要特性和用法:

  1. 模式匹配awk 的名称来源于其创始人 Alfred V. Aho、Peter J. Weinberger 和 Brian W. Kernighan 的姓氏首字母。它最初被设计为一种模式扫描和处理工具。

  2. 内置变量awk 提供了多个内置变量,如 $0(当前记录)、$1$2…(字段)、NR(记录数)、FS(字段分隔符,默认为空格)、OFS(输出字段分隔符,默认为空格)等。

  3. 字段分隔符:通过 -F 选项或在脚本中设置 FS 变量,可以定义字段的分隔符,例如使用 : 或正则表达式作为分隔符。

  4. 模式动作awk 脚本由模式和动作组成。模式可以是正则表达式或匹配所有记录的模式(如 NR),动作是当模式匹配时执行的命令序列。

  5. 数组awk 支持关联数组,允许使用字符串作为索引。

  6. 控制流awk 支持 if-elsewhileforbreakcontinue 等控制流语句。

  7. 内置函数awk 提供了丰富的内置函数,如 length()split()sub()gsub() 等。

  8. 模式和动作的组合:可以组合多个模式和动作,对文本进行复杂的处理。

  9. 命令行和脚本文件:可以在命令行中直接使用 awk,也可以将 awk 脚本写入文件中执行。

  10. 程序化扩展awk 可以通过其程序化接口与其他程序集成,如 Perl 或 Python。

以下是一些 awk 的基本用法示例:

  • 打印文件中的每一行:

    awk '{print}' filename
    
  • 打印文件的第一列(字段):

    awk '{print $1}' filename
    
  • 使用正则表达式打印包含特定文本的行:

    awk '/pattern/ {print}' filename
    
  • 计算文件中的行数:

    awk 'END {print NR}' filename
    
  • 将字段分隔符设置为逗号,并打印第二列:

    awk -F, '{print $2}' filename
    
  • 将文本文件中的字段用不同的分隔符输出:

    awk '{printf "%s|%s\n", $1, $2}' filename
    
  • 计算某个模式出现的次数:

    awk '/pattern/ {count++} END {print count}' filename
    

awk 是一个非常灵活的工具,适用于各种文本处理任务,从简单的文本打印到复杂的数据转换和分析。

awk文本转成Redis command

有一份role.csv文件,需要把每一行作为key-value写入redis。内容如下:

Administrator@DESKTOP-CKPKB5K MINGW64 /d/temp
$ cat role.csv
1702150998967975938,1
1704318750462914562,1
1704692754463825921,1
1705054538352656386,1
...

每一行使用,分割,前面为key的一部分,后面为value。

awk 生成批指令

Administrator@DESKTOP-CKPKB5K MINGW64 /d/temp
$ awk -F ',' '{printf "set future:%s %s\n",$1,$2}' role.csv
set future:1702150998967975938 1
set future:1704318750462914562 1
set future:1704692754463825921 1
...

命令各部分的解析:

  • awk:这是调用 awk 程序的命令。

  • -F ',':这个选项设置了字段分隔符为逗号(,)。在 awk 中,默认的字段分隔符是空格或制表符,使用 -F 选项可以指定其他字符作为字段分隔符。在这个例子中,由于文件是 CSV 格式,逗号被用作字段之间的分隔符。

  • '{printf "set future:%s %s\n",$1,$2}':这是传递给 awk 的命令或脚本。awk 将对 role.csv 文件中的每一行执行这个脚本。

    • printf:这是一个格式化打印函数,用于按照指定格式输出文本。
    • "set future:%s %s\n":这是 printf 函数的格式字符串。%s 是字符串的占位符,\n 是换行符。
    • $1$2:这些是 awk 的内置变量,代表当前行的第一个和第二个字段。在这个脚本中,$1$2 将被用作 printf 函数的参数。
  • role.csv:这是 awk 要处理的文件名。

awk 生成批指令并且输出到文档

Administrator@DESKTOP-CKPKB5K MINGW64 /d/temp
$ awk -F ',' '{printf "set future:%s %s\n",$1,$2}' role.csv > role.redis.script.csv

使用> role.redis.script.csv把输出重定向到role.redis.script.csv文件。

Administrator@DESKTOP-CKPKB5K MINGW64 /d/temp
$ cat role.redis.script.csv
set future:1702150998967975938 1
set future:1704318750462914562 1
set future:1704692754463825921 1
set future:1705054538352656386 1
...

redis-cli批量执行命令

/d/dev/Redis-x64-5.0.14.1/redis-cli -h you-host -a you-passowrd --no-auth-warning --pipe < role.redis.script.csv

这条命令使用了 redis-cli 工具,它是用于与 Redis 数据库交互的命令行界面。下面是对这条命令各部分的解析:

  • redis-cli:这是 Redis 命令行工具的调用命令。

  • -h you-host-h 参数后面跟着的是 Redis 服务器的主机名或 IP 地址。在这个例子中,you-host 是占位符,应该替换为实际的 Redis 服务器地址。

  • -a you-password-a 参数后面跟着的是 Redis 服务器的密码。如果 Redis 实例配置了密码保护,这个参数是必需的。you-password 应该替换为实际的密码。

  • --no-auth-warning:这个选项用于抑制认证警告。在使用密码连接时,Redis 可能会显示一些警告信息,使用这个选项可以避免这些警告信息的输出。

  • --pipe < role.redis.script.csv--pipe 选项允许 redis-cli 从标准输入读取一系列 Redis 命令并执行它们。< 是一个 shell 重定向操作符,它将文件 role.redis.script.csv 的内容作为标准输入传递给 redis-cli

  • role.redis.script.csv:这是包含 Redis 命令的文件。文件名中的 .csv 扩展名表明它是一个逗号分隔值(CSV)格式的文件,但这里它可能只是一个命名约定,实际上文件可能包含一系列的 Redis 命令,每行一个。

综合来看,这条命令的作用是:使用 redis-cli 工具,通过指定的主机和密码连接到 Redis 服务器,并使用 --no-auth-warning 选项来抑制认证警告。然后,它通过 --pipe 选项从 role.redis.script.csv 文件中读取命令列表,并将这些命令作为输入传递给 redis-cli 执行。

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冲上云霄的Jayden

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值