Text-Processing

使用 if-else 語句修改文本文件

  • March 31, 2020

我有一個這樣的輸入文件:

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 and $ 4個相同然後插入11個 $ 3 location and in location $ 4、插入儲存的值 $ 2 or $ 4(這裡是 1)。其餘欄位向右移動兩個位置。
  2. 如果 NF==5 並且如果 $ 1 and $ 3 位置相同 $ 3, insert the value that is stored in $ 1 或 $ 3 (here 2) and in location $ 4,插入 5。其餘欄位向右移動兩個位置。
  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  

提前致謝!

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 
$ 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

引用自:https://unix.stackexchange.com/questions/574991