
テキストファイルの数だけ乗算できるbashコマンドを探しています。以下は私のテキストファイルの内容です。すべての数字に100を掛ける必要があります。
0 4530000 sil
4530000 11100000 ow
11100000 6320000 p
6320000 7600000 ah
7600000 8410000 n
8410000 12100000 sil
数字のみの 1 行の場合は、次のようなものを使用します。
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
または1行が必要な場合:
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