![用计算结果替换文件第一部分中的数字](https://linux22.com/image/79652/%E7%94%A8%E8%AE%A1%E7%AE%97%E7%BB%93%E6%9E%9C%E6%9B%BF%E6%8D%A2%E6%96%87%E4%BB%B6%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%E4%B8%AD%E7%9A%84%E6%95%B0%E5%AD%97.png)
我有一个如下所示的文件:
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 !§%/(//