ファイルの最初の部分の数値を計算結果に置き換えます。

ファイルの最初の部分の数値を計算結果に置き換えます。

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

     1 abcde
     2 00
     3 12
     4 12
     5 ghijkl
     6 jsaslm
     7 uawrns
     8 abcde
     9 \(%"!&/
    10 $!"$&/(
    90 !§%/(//

最初の「列」(たとえば、1、2などを含む数字)から3より大きいすべての数字を変更したいと思います。これは、3で割った数字を除いて(ただし3でなければならない)、数字をモジュロ3で計算した結果に置き換える必要があります。したがって、結果は次のようになります。

     1 abcde
     2 00
     3 12
     1 12
     2 ghijkl
     3 jsaslm
     1 uawrns
     2 abcde
     3 \(%"!&/
     1 $!"$&/(
     3 !§%/(//

形式は重要ではありませんが、上記の方法が好ましい。

私はLinuxを使用しています。

答え1

更新された問題を解決するには、awkを使用してください。

awk '$1{$1=$1%3?$1%3:3}1' file

 1 abcde
 2 00
 3 12
 1 12
 2 ghijkl
 3 jsaslm
 1 uawrns
 2 abcde
 3 \(%"!&/
 1 $!"$&/(
 3 !§%/(//

答え2

そしてawk

$ awk -v n=3 '{$1 = ($1 > n) ? ($1 % n) ? $1 % n : n : $1};1' <file
1 abcde
2 00
3 12
1 12
2 ghijkl
3 jsaslm
1 uawrns
2 abcde
3 \(%"!&/
1 $!"$&/(
3 !§%/(//

関連情報