범위 내의 문자열 바꾸기 [중복]

범위 내의 문자열 바꾸기 [중복]

다음과 같은 텍스트 파일이 있다고 가정해 보겠습니다.

A1
A2
A3
A4
A7
A27
A31
A56
A100
A8
A11

A1~A30을 A1로 바꾸고 A31~A100을 sed, awk 또는 for 루프를 사용하여 A2로 바꿔야 하는 이와 같은 출력을 원합니다.

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

작동하는지 확인하고 확인하십시오. 저도 새로운 답변입니다. 인사.

관련 정보