使用 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,在 $4 位置插入存储在 $2 或 $4 中的值(此处为 1)。其余字段向右移动两个位置。
  2. 如果 NF==5 并且 $1 和 $3 相同,则在位置 $3 中插入​​存储在 $1 或 $3 中的值(此处为 2),在位置 $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  

提前致谢!

答案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; print $1 " " $2 " " a " " b " " $3 " " $4 " " $5;} else if(NF == 5 && $1 == $3) {c=$1; d=5; print $1 " " $2 " "c " "d " "$3 " " $4 " " $5;} else print $0}'sample_simple.txt

相关内容