使用 awk 中的 if else 語句基於現有列建立新列

使用 awk 中的 if else 語句基於現有列建立新列

我有一個包含> 7 Mio 行(實際上> 20 列)的資料集,並且想要建立一個新列(我的資料集範例有5 列),所以這將是數字6。標題。

條件如下: 如果第 1 列的值大於第 3 列的值,則新列應具有第 1 列的值;否則其值應為「1 減去第 1 列的值」。

我嘗試了這個,但它不起作用:

awk '{ if ($1 > $3) $6 == $1}; else $6 == 1-$1}' test.txt > test2.txt

資料集(範例):

col1 col2 col3 col4 col5
1 3 4 string string
4 2 1 string string

對於第 1 行 col6 應該是 1-1 = 0,對於第 2 行 col6 應該是4

答案1

==檢查兩個操作數的值是否相等,=將右側操作數的值指派給左側運算元。以下幾行應該有效:

awk '{ if($1>$3) $6=$1; else $6=1-$1; print $0; } ' test01 > test02 

或者:

awk '$1>$3{ $6=$1; print $0; } $1<$3{ $6=1-$1; print $0; }' test01 > test02 

因為awk這樣工作:

awk 'condition1{main1} condition2{main2} ... conditionN{mainN}' file.txt

如果沒有給予任何條件,則始終執行相應的 main。

答案2

嘗試這個。只需==替換為=並添加大括號即可。

awk '{ if ($1 > $3){ $6=$1 }else{ $6=1-$1 } print }' test.txt >test2.txt

答案3

$ awk 'NR==1 { $0 = $0 OFS "newcol"; print; next }
             { $(NF+1) = $1      }
    $1 <= $3 { $NF     = 1 - $NF } 1' file
col1 col2 col3 col4 col5 newcol
1 3 4 string string 0
4 2 1 string string 4

awk腳本新增並輸出新的列標題後,它開始計算其他行的新列的值。

該值的計算方法是先將其設為第 1 列中的值,如果第 1 列小於或等於第 3 列,則從 1 中減去該值1。 )。

$(NF + 1)給(「最後一個欄位之後的欄位」)賦值將向目前行新增一個額外的列,並且還會增加NF(目前記錄中的欄位數)。

顯然,您也可以使用明確的 - 語句來執行此操作if

awk 'NR==1 { $0 = $0 OFS "newcol"; print; next }
    { if ($1 > $3) $(NF+1) = $1; else $(NF+1) = 1 - $1 } 1' file

相關內容