web-dev-qa-db-ja.com

1行の値を番号順に複数行に変換する

次の変数には、たとえばこの値が含まれます

echo $SERVERS


server1,server2,server3,server4,server5

それらを別のラインにパイプしたいときは、次のようにします

echo $SERVERS | tr ',' '\n'

server1
server2
server3
server4
server5

今私は別のパイプを追加したいと思います( echo $SERVERS | tr ',' '\n' | ..... )、以下の期待される結果を出力するため

1  ………………  server1
2  ………………… server2
3  ………………… server3
4  ………………… server4
5  ………………… server5
6  ………………  server6
7  ………………… server7
8  ………………… server8
9  ………………… server9
10 ………………… server10
11 ………………… server11
12 ………………… server12

それを行う方法がわかりませんが、おそらくncコマンドを使用する

なにか提案を?

2
yael

Awkで:

$ servers='server1,server2,server3,server4,server5'

$ awk -v RS=, '{print NR "........" $0}' <<<"$servers"
1........server1
2........server2
3........server3
4........server4
5........server5

または、左詰めで行番号を出力するには

awk -v RS=, '{printf "%3d........%s\n",NR,$0}' <<<"$servers"

(フィールド幅3(サーバーリストのサイズに応じて)。

7
steeldriver
cat -n <<< ${SERVERS//,/$'\n'} 
     1  server1
     2  server2
     3  server3
     4  server4
     5  server5
3
RudiC
$ awk -F',' '{for (i=1; i<=NF; i++) printf "%-2d ........ %s\n", i, $i}' <<<"$servers"
1  ........ server1
2  ........ server2
3  ........ server3
4  ........ server4
5  ........ server5
3
Ed Morton