次の結果を印刷するbashスクリプトがあります。
120,900
1160,001
80,730
600,165
6,310
1111,203
私は次のような結果を残したいと思います。
120,900
1160,001
80,730
600,165
6,310
1111,203
2番目の列のカンマの後に3つの数字だけを保持するためにこの行を使用しました。
awk '{ printf "\t" $1 "\t|\t" "%.3f\n", $2 }' MyFile.txt;
どうすればいいですか?
答え1
printf
代わりに使用してくださいecho
:
$ cat 442817.sh
#!/bin/bash
numbers=(120,900 1160,001 80,730 600,165 6,310 1111,203)
for n in "${numbers[@]}"; do
printf "%10s\n" "$n"
done
$ ./442817.sh
120,900
1160,001
80,730
600,165
6,310
1111,203
答え2
Awk
解決策:
awk 'FNR == NR{ len = length; if (len > max_len) max_len = len; next }
{ printf "%" max_len "s\n", $0 }' file.txt file.txt
出力:
120,900
1160,001
80,730
600,165
6,310
1111,203
またはGNU経由coreutils
:
printf "%$(sort -nr file.txt | wc -L)s\n" $(cat file.txt)
答え3
$ column -t -s, file | sed 's/^\([0-9]*\)\( *\)/\2\1,/'
120,900
1160,001
80,730
600,165
6,310
1111,203
出力はcolumn
次のとおりです
120 900
1160 001
80 730
600 165
6 310
1111 203
このsed
コマンドは、単に2つの列の間のスペースを行の先頭に移動し、その位置にカンマを挿入します。
最初の 2 つの余分なスペースが必要ない場合は、次のようにします。
$ column -t -s, file | sed -e 's/^\([0-9]*\)\( *\)/\2\1,/' -e 's/^ //'
120,900
1160,001
80,730
600,165
6,310
1111,203