gpt4 book ai didi

bash - 根据文件中的最后 5 个单词打印第一个单词

转载 作者:行者123 更新时间:2023-11-29 09:18:50 25 4
gpt4 key购买 nike

我有一个包含以下内容的文件,我只想打印以 P 开头且最后 5 个字符为 12

的第一个单词

文件:

papa;1;2;3;4;5;12;12;12;12;12
Peter;12;12;12;12;12
alpha;2;2;2;4;5;6;7;8;9;3;3;3;3;3
Prod;1;2;3;4;1;1;1;1;12;12;12;12;12

预期输出:

Peter  
Prod

我的尝试:

cat filename | awk -F '[;]' '{print substr( $0,length($0)-5,length($0))}' 
cat filename | egrep -V 'p|a' | awk -F '[;]' '{print $1}'

但是我无法加入输出。


更新:-

从接受的答案中的评论来看,显然 OP 表示最终文件中的行也可能少于 5 个字段。

最佳答案

Awk 中仅针对第一个单词的粗略方式

awk -F';' '$1 ~ /^P/ && NF > 5 {c=0; for(i=NF-4;i<=NF;i++) {if($i==12){c++}} if(c==5) print $1} ' file
Peter
Prod

如果需要整行,请删除 print 语句中的 $1

awk -F';' '$1 ~ /^P/ && NF > 5 {c=0; for(i=NF-4;i<=NF;i++) {if($i==12){c++}} if(c==5) print} ' file
Peter;12;12;12;12;12
Prod;1;2;3;4;1;1;1;1;12;12;12;12;12

它是如何工作的?

  • 部分 $1 ~ "^P" 是一个正则表达式匹配,用于过滤掉以 P 开头的行
  • 在从上面开始的行中,解析最后 5 个字段(使用 NF 循环并维护一个计数器,如果找到 12 的 5 个实例则打印该行。

关于bash - 根据文件中的最后 5 个单词打印第一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45189487/

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