if-else 文を使用したテキストファイルの変更

if-else 文を使用したテキストファイルの変更

次の入力ファイルがあります。

3 1 10 1 6  
9 4 2  4 1  
9 2 2  2 1  
2 4 2  2 2  
9 4 9  2 9 1 2    

観察すべき条件:

  1. NF==5 で $2 と $4 が等しい場合は、$3 位置に 11 を挿入し、$2 または $4 (ここでは 1) に格納された値を $4 位置に挿入します。残りのフィールドは右に2つ移動します。
  2. NF==5 で $1 と $3 が等しい場合は、$1 または $3 (ここでは 2) に格納された値を $3 位置に挿入し、5 を $4 位置に挿入します。残りのフィールドは両方の位置を正しい位置に移動します。
  3. 残りの行は変更されません。

出力は次のようになります。

3 1 11 1 10 1 6    
9 4 11 4 2  4 1  
9 2 11 2 2  2 1  
2 4 2  5 2  2 2  
9 4 9  2 9 1 2  

よろしくお願いします!

答え1

$ awk 'NF==5{ if ($2==$4) $2 = $2 OFS 11 OFS $4; else if ($1==$3) $2 = $2 OFS $1 OFS 5 } 1' file
3 1 11 1 10 1 6
9 4 11 4 2 4 1
9 2 11 2 2 2 1
2 4 2 5 2 2 2
9 4 9  2 9 1 2

答え2

awk '{if((NF==5) && ($2 == $4)){$7=$5;$5=$3;$6=$4;$3=11;$4=$2;print $0}else if ((NF==5) && ($1 == $3)){$7=$5;$5=$3;$6=$4;$4=5;$3=$1;print }else{print $0}}' filename

出力

3 1 11 1 10 1 6
9 4 11 4 2 4 1
9 2 11 2 2 2 1
2 4 2 5 2 2 2
9 4 9  2 9 1 2 

答え3

以下は、目的の出力を提供するawkコマンドラインです。

awk '{if(NF == 5 && $2 == $4) {a=11; b = $ 2; $1 "" $2 "" a " " b " " $3 "" $4 " " $5;} else if(NF == 5 && $1 == $3) {c=$1; d = 5; $1 " " $2 " "c " "d " "$3 " " $4 " " $5;} 印刷 $0}'sample_simple.txt

関連情報