将一行值转换为具有编号顺序的多行

将一行值转换为具有编号顺序的多行

以下变量包括例如此值

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类似的命令 os

有什么建议吗?

答案1

使用 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(根据服务器列表的大小选择适当的字段宽度)。

答案2

cat -n <<< ${SERVERS//,/$'\n'} 
     1  server1
     2  server2
     3  server3
     4  server4
     5  server5

答案3

$ 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

相关内容