Gnuでは、各行のコピーの特定の値を異なるように変更しながら、各行を複製します。

Gnuでは、各行のコピーの特定の値を異なるように変更しながら、各行を複製します。

ファイルの各行を2回繰り返すことを望み、行の最初のコピーでは、値3は2に変更され、値4は1に変更されます。各行の2番目のコピーでは、値3が1に変更され、値4が2に変更されます。レプリケーションにはawkコマンドを使用できることを知っています。

awk '{for(i=0;i<1;i++)print}' input > output

しかし、私が説明した方法で値をどのように変更するのかわかりません。

たとえば、各行を2回繰り返します。

1 000003444
2 334566875
3 000233300
4 222111000

になる:

1 000002111
1 000001222
2 221566875
2 112566875
3 000222200
3 000211100
4 222111000
4 222111000

答え1

そしてawk

$ awk '
  { tmp = $2; gsub("3", "2", $2); gsub("4", "1", $2); print}
  { $2 = tmp; gsub("3", "1", $2); gsub("4", "2", $2); print}
' <file

答え2

パール方式:

$ perl -lane '$i=$F[1]; $F[1]=~s/3/2/g; $F[1]=~s/4/1/g; 
              $i=~s/3/1/g; $i=~s/4/2/g; print "$F[0] $F[1]\n$F[0] $i"' file 
1 000002111
1 000001222
2 221566875
2 112566875
3 000222200
3 000211100
4 222111000
4 222111000

まず、現在の行をとして保存し、現在の行$iで必要な代替操作を実行し、最後$iに現在の行($_)とを印刷します$i

関連情報