首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[ awk ]+、[awk]+、[0-9]+和awk中的标志命令

[ awk ]+、[awk]+、[0-9]+和awk中的标志命令
EN

Stack Overflow用户
提问于 2014-01-29 07:33:16
回答 1查看 1.6K关注 0票数 2

我试图理解awk中的一些命令,这些命令与If statement inside awk to change a value问题有关。

输入文件是

代码语言:javascript
复制
...
MODE P E
IMP:P 1 19r 0
IMP:E 1 19r 0
...
SDEF POS= 0 0 14.6 AXS= 0 0 1 EXT=d3 RAD= d4 cell=23 ERG=d1 PAR=2
SI1 L  0.020
SP1    1
SI4 0. 3.401                                                                    
SI3 0.9 
...
NPS 20000000

代码是

代码语言:javascript
复制
#! /bin/bash

vals=(0.02 0.04)

for val in "${vals[@]}"; do
awk -v val="$val" '
  BEGIN { i=1; split (val,v," ") }
  # If it is a string, find the sequence SI1 L and change the value after that, using values that the user inputs
  /SDEF POS.*ERG=[a-zA-Z]+/ { flag="y" ; }
  /SI1 L/ { if (flag=="y") { $3=v[i]; i++; flag="n"; } }
  # If it is a number, change the number using values that the user inputs.
  /SDEF POS.*ERG=[0-9]+ / { sub(/ERG=[0-9]*/, "ERG="v[i],$0);i++; }
  1
' 20small > "${val}"
done

我正在尝试以下几点

  1. 为什么在[a-z][A-Z][0-9]之后有+标志?我可以理解,这些命令在定义的序列之后搜索任何字母和数字,但我似乎不明白+是干什么的。
  2. flag到底是做什么的?我可以理解/<expresion>/ flag="y"y“替换”了<expresion>。我似乎不明白为什么要换几行旗子。像假国旗吗?
  3. / /到底是做什么的?我知道这表明了搜索模式。为什么要添加SDEFPOS?就为了确定这句话是对的?我还对.*的使用感到困惑。它是否意味着查找SDEF POS行,并在同一条线上查找ERG,而不管它们之间是什么?/SDEF POS.*ERG=[a-zA-z]+/到底是做什么的?

我是awk的新手,所以我试着以身作则。更受欢迎的是帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-29 07:41:31

  1. +指的是一个或多个重复。例如,a+将匹配a aa aaa等。a*匹配与+相同,但也不匹配a
  2. 标志用作临时信息持有者。
  3. / /是正则表达式保持器,用于显示它必须在两个/中匹配regex。

我建议您查看一些awk一行程序,并尝试了解它们是如何工作的。还可以从阅读一些awk教程开始。你可以通过谷歌找到很多东西。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21424788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档