gpt4 book ai didi

regex - AWK 不同行开始的不同验证

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:37 24 4
gpt4 key购买 nike

我有数据

90|1234|10:50|Y
91|1234|JOHN|john@domain.com|alert
92|1234|Student|MIB Alerts

注意:$2是键值,在接下来的逻辑中有一定意义

我想做不同的验证

for line starting with 90, NF=4, $2 Numeric, $3 Time, $4 Y/N
for line starting with 91, NF=5, $2 Non Empty, $3 Email ID
for line starting with 92, NF=4, $2 Numeric

我最终根据 90、91 和 92 值 $1 开始拆分文件

使用

grep "^90" filename | awk -F '|' 'NF == 4 && $2 ~  /^[0-9]*$/ && $3 ~ /^[0-9]{2}:[0-9]{2} $/ && $4 ~/^[YN]$/' >> file90.txt
grep "^91" filename | awk -F '|' 'NF == 5 && $2 ~ /^[0-9]*$/ && !length($3) && $4 ~ /^[[:alnum:]_.]+@[[:alnum:]_]+[.][[:alnum:]]+$/' >> file91.txt
grep "^92" filename | awk -F '|' 'NF == 4 && $2 ~ /^[0-9]*$/' >> file92.txt

然后

cat file92.txt >> file91.txt
cat file91.txt >> file90.txt

经过一些改动,这个模型对我有用,但它有两个缺点:

  1. 它更改文件,因为 90 保持在顶部,然后是 91,然后是 92 [在传入的文件记录中可以以任何模式出现,91 可能会出现在顶部]
  2. 多个文件,拆分和合并
  3. 我觉得我在不必要地使用 grep

有人可以帮助我在单个 AWK 脚本或语句中执行此操作吗

最佳答案

$1 的条件添加到每个验证中。

awk -F'|' '
$1 == "90" && NF == 4 && $2 ~ /^[0-9]*$/ && $3 ~ /^[0-9]{2}:[0-9]{2} $/ && $4 ~/^[YN]$/ { print }
$1 == "91" && NF == 5 && $2 ~ /^[0-9]*$/ && !length($3) && $4 ~ /^[[:alnum:]_.]+@[[:alnum:]_]+[.][[:alnum:]]+$/ { print }
$1 == "92" && NF == 4 && $2 ~ /^[0-9]*$/ { print }' filename > result.txt

关于regex - AWK 不同行开始的不同验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33676777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com