替换范围内的字符串

替换范围内的字符串

假设我有文本文件,例如

A1
A2
A3
A4
A7
A27
A31
A56
A100
A8
A11

我想要这样的输出,其中 A1 到 A30 应替换为 A1,A31 到 A100 应替换为 A2,使用 sed、awk 或 for 循环

A1
A1
A1
A1
A1
A1
A2
A2
A2
A1
A1

我是新手请帮忙,谢谢和问候

我试过这个

sed -i "s/(A1:A10)/A1/g" file.txt

我也尝试过循环,请改进我的编码

for i in file.txt; 
  do cat "$i";
     if ((A*>A10)); 
         then
         sed -e 's/A*/A1;
     else sed -e 's/A*/A2;
     fi
 done 

答案1

你好欧麦尔您可以尝试使用这个单行命令(它适用于 Bash 和 Zsh )让我解释一下自己:我迭代文件输出,但我只修剪数字(因为所有条目都以“A”开头),然后,我过滤每个if-elif 块的行,其中如果它在 1 到 30 之间的范围内,则回显“A1”,但如果它在 31 到 100 之间,则回显“A2”,正如您在问题中所要求的那样,但所有这些都在一行中。

for i in `cat text_file |cut -d 'A' -f 2`; do if (($i > 0 && $i <= 30)); then echo 'A1'; elif (($i > 30 && $i <= 100)); then echo 'A2';  fi ; done

请检查并确认是否有效,我也是新回答。问候。

相关内容