텍스트 파일의 숫자를 곱하는 Bash 스크립트?

텍스트 파일의 숫자를 곱하는 Bash 스크립트?

텍스트 파일의 숫자만 곱할 수 있는 bash 명령을 찾고 있습니다. 아래는 내 텍스트 파일의 내용입니다. 모든 숫자에 100을 곱해야 합니다.

    0 4530000 sil
4530000 11100000 ow
11100000 6320000 p
6320000 7600000 ah
7600000 8410000 n
8410000 12100000 sil

숫자만 있는 한 줄의 경우 다음과 같은 것을 사용합니다.

for file in *.txt; \
do y=`sed -n '1 p' "$file"`;
   z=$(bc<<<"$y*100")
   sed $file -i -e 's/'"$y"'/'"$z"'/'
done

하지만 문자가 포함된 여러 줄에 대해 이 작업을 수행하는 방법을 모르겠습니다. 내 파일의 줄 수는 고정되어 있지 않습니다. 각 파일의 줄 수는 최대 8개까지 다릅니다.

답변1

펄을 사용할 수 있습니다

perl -pe 's/\b(\d+\.)?\d+\b/$&*100/ge' file

답변2

정수의 경우 모든 숫자에 100을 곱한다는 것은 >0인 경우 각 숫자 끝에 00을 추가한다는 의미입니다.

sed 's/[1-9][0-9]*/&00/g' infile

답변3

GNU 또는 ,를 사용하여 , busybox awk와 같은 1.2숫자를 식별합니다 .123e-4.

awk -v CONVFMT=%.19g \
    -v RS='\\<[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?\\>' \
    -v ORS= 'RT != "" {RT *= 100}; {print $0 RT}'

CONVFMT숫자 형식 에 적응해야 할 수도 있습니다 .

답변4

awk를 사용할 수 있습니다. Parse.awk로 저장합니다.

{
  for (i = 1; i <= NF; ++i) {
    number = match($i, /[0-9]+(\.[0-9]+)?/)
    printf number? "%g " : "%s ", number? $i * 100 : $i
  }
  printf "\n"
}

그런 다음 다음을 실행하십시오.

awk -f parse.awk file

또는 한 행을 원하는 경우:

awk '{for(i=1;i<=NF;++i){n=match($i,/[0-9]+(\.[0-9]+)?/);printf n?"%g ":"%s ",n?$i*100:$i} printf"\n"}' file

관련 정보