2
我想了解awk中的一些命令,這些命令與If statement inside awk to change a value問題有關。[a-z] +,[A-Z] +,[0-9] +和awk中的標誌命令
輸入文件是
...
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
而且代碼
#! /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
我想ubderstand以下
- 後爲什麼
[a-z]
,[A-Z]
和[0-9]
存在+
標誌?我可以理解,這些命令在定義的序列後搜索任何字母和數字,但我似乎無法理解+
做什麼。 flag
究竟做了什麼?我可以理解/<expresion>/ flag="y"
用y
「替代」<expresion>
。我似乎無法理解改變國旗幾行下面的原因。這是否就像一面虛擬旗幟?/ /
究竟做了什麼?我知道這聲明瞭搜索模式。爲什麼加入SDEF
和POS
?只是爲了確定這是正確的路線?我也發現混淆了.*
的使用。是不是意味着找不到SDEF POS
一行,並且在同一行尋找ERG
,不管它們之間是什麼?/SDEF POS.*ERG=[a-zA-z]+/
究竟做了什麼?
我是awk
的新手,所以我想通過示例來了解它。幫助將更多,歡迎!
非常感謝您的回答!雖然有更多問題。爲什麼要添加新標誌,即「flag =」n「'?這是一個無用的信息,不是嗎?另外'''做什麼?例如'/ SDEF POS。* ERG = [a-zA-Z] +'是做什麼的? – Thanos
'.'表示任何字符。標誌從'y'(是)改變爲'n'(否),告訴它完成一些操作,以防止重複。我喜歡帶'0'或'1'的標誌,但任何事情都可以。 '/ SDEF POS。* ERG = [0-9] + /'產生一個以'SDEF POS'開始的文本,然後是一些或多個未知的字符'。*'然後'ERG ='然後一個或多個數字'[0-9 ] +'。 Eks它會匹配這條線'DATA SDEF POSME TOERG = 3445356' – Jotne
我明白了!這意味着是或否......現在它使4s完美的感覺!非常感謝你!!! – Thanos