用计算结果替换文件第一部分中的数字

用计算结果替换文件第一部分中的数字

我有一个如下所示的文件:

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

我想替换第一“列”中所有大于 3 的数字(即包含 1、2 等的数字)。它们应该被以 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 !§%/(//

相关内容