制作水平字符串垂直shell或awk

时间:2013-08-18 01:12:15

标签: string shell awk vertical-alignment alignment

我有一个字符串

ABCDEFGHIJ

我想要打印。

A
B
C
D
E
F
G
H
I
J

即水平,字符与垂直之间无编辑。关于如何在一行旁边放一个数字的奖励点。如果这是一个awk或shell脚本会很好,但我愿意学习新东西。 :)谢谢!

5 个答案:

答案 0 :(得分:3)

awk one-liner:

awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++)print i,$i}'

测试:

kent$  echo "ABCDEF"|awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++)print i,$i}'                                                                                                       
1 A
2 B
3 C
4 D
5 E
6 F

答案 1 :(得分:2)

如果您只想将字符串转换为每行一个字符,您只需要告诉awk每个输入字符是一个单独的字段,每个输出字段应该用换行符分隔,然后重新编译每个记录通过为自己分配一个字段:

awk -v FS= -v OFS='\n' '{$1=$1}1'

e.g:

$ echo "ABCDEFGHIJ" | awk -v FS= -v OFS='\n' '{$1=$1}1'
A
B
C
D
E
F
G
H
I
J

如果您希望每个字符旁边都有字段编号,请参阅@ Kent的解决方案或管道到cat -n

您发布的sed解决方案是不可移植的,并且在某些操作系统上会出现一些seds失败,并且会在您的sed输出末尾添加一个不需要的空白行,然后在您的管道输出后成为一个尾随行号{ {1}}所以这不是一个好的选择。你应该接受@ Kent的回答。

答案 2 :(得分:1)

再多一次awk

echo "ABCDEFGHIJ" | awk '{gsub(/./,"&\n")}1'
A
B
C
D
E
F
G
H
I
J

答案 3 :(得分:0)

所以我用sed想出了这个。

 sed 's/./&\n/g' horiz.txt > vert.txt

答案 4 :(得分:0)

这可能适合你(GNU sed):

sed 's/\B/\n/g' <<<ABCDEFGHIJ

代码:

sed 's/\B/\n/g' <<<ABCDEFGHIJ | sed = | sed 'N;y/\n/ /'

或:

sed 's/\B/\n/g' <<<ABCDEFGHIJ | cat -n