次のファイルがあります。
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 !§%/(//