linux - 用于组合多字段验证的 AWK 脚本

标签 linux bash shell awk sed

我有一个包含 7 列的文件,带有插入符号 (^) 分隔符 例子

ABCD123456^12345678^192.654^02Aug15^12:10:36

我写了一个 awk 命令来检查重复项

awk '!seen[$0]++' filename

第一个字段的长度应为 10,第二个字段的长度应为 8

awk -f '^' '{ if ((length($1) == 10) && (length($1) == 10)) print }' 

问题是

  1. 如何进行时间验证 ([0-9]:[0-9]:[0-9])?什么 awk 查询

    awk -F '^' '$5 ~ [0-9]:[0-9]:[0-9]' 打印

    但这行不通

  2. 日期验证。如何验证 2 位数字的日期、3 个字符的月份和 2 位数字的年份

  3. 第三字段中的十进制数验证

  4. 我怎样才能将这一切结合到一个 awk 脚本中

最佳答案

您可以像这样将它们组合成一个 awk 命令:

awk -F '^' 'length($1) == 10 && length($2) == 8 &&
     $3 ~ /^[0-9]+\.[0-9]+$/ && $5 ~ /^[0-9]{2}:[0-9]{2}:[0-9]{2}$/ && !seen[$0]++' file

关于linux - 用于组合多字段验证的 AWK 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33553287/

相关文章:

linux - 如何在 Ubuntu 服务器上连续运行 go 应用程序

linux - 从文件 linux/bash 读取输入

c - 获取 ELF 二进制文件的加载地址,dlopen 未按预期工作

bash - 在数百万个 csv 文件上运行 bash 脚本

regex - shell 脚本的空格分隔参数

linux - ldconfig - LD_LIBRARY_PATH 不是已知的库类型

java - 如何从在 Linux 上运行的 Java 应用程序加载 native 库 (.dll)?

macos - 列出目录中所有文件类型及其平均大小的命令

bash - 如何通过docker compose或swarm模式运行Elasticsearch并使用命令安装插件

Django 网络 bash