簡體   English   中英

使用if else語句將單詞替換為awk

[英]Replace a word with awk using if else statement

我正在嘗試使用if else語句替換awk中的單詞。

以下是我已經嘗試過的內容。 基本上,如果第三個單詞是“ Normal”,請將其更改為0,否則將其更改為1。

awk -F "," '{(if $3=='Normal') {$3=0}; else {$3=1} }' filename

您需要一個適當的if - else條件,然后是一個觸發器來打印行:

awk '{if ($3=="Normal") {$3=0} else {$3=1}}1' file

在這里, 1充當True條件,它觸發awk的默認行為,包括打印當前行。

您可以為此使用三元運算符:

awk '{$3=($3=="Normal") ? 0 : 1}1' file

另請注意,您正在處理以,分隔的字段,因此以后需要保留它們。 為此,請使用OFS (輸出字段分隔符)。 全部一起:

awk 'BEGIN{FS=OFS=","} {$3=($3=="Normal") ? 0 : 1}1' file

給定這樣的示例文件:

$ cat a
hello,how,are,you
i,am,Normal,buuu

這將返回:

$ awk 'BEGIN{FS=OFS=","} {$3=($3=="Normal") ? 0 : 1}1' a
hello,how,1,you
i,am,0,buuu

您的方法出了什么問題?

awk -F "," '{(if $3=='Normal') {$3=0}; else {$3=1} }' filename
  • 您正在使用{(if condition) {action}; else {action}} {(if condition) {action}; else {action}} 這有幾個問題:
    • if的條件是括號內的if (condition)if (condition)而不是(if condition)
    • 您說(if condition) {action} ,然后; 有了這個分號中, if語句來獲取完成,接下來的動作將被執行反正。 因此,只要丟下它,然后說出if (condition) {...} else {...}沒有了; else之前。
    • 您在$3=='Normal'中使用單引號。 這將關閉awk語句,因此無法正確解釋,因此您需要使用雙引號: $3=="Normal"
  • 缺少printprint行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM