awkのif elseステートメントを使用して、既存の列に基づいて新しい列を作成します。

awkのif elseステートメントを使用して、既存の列に基づいて新しい列を作成します。

700万を超える行(実際には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は常に実行されます。

おすすめ記事