![텍스트 파일의 숫자를 곱하는 Bash 스크립트?](https://linux55.com/image/120426/%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%88%AB%EC%9E%90%EB%A5%BC%20%EA%B3%B1%ED%95%98%EB%8A%94%20Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%3F.png)
텍스트 파일의 숫자만 곱할 수 있는 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