使水平String垂直壳或awk

Making horizontal String vertical shell or awk

我有一个字符串

1
ABCDEFGHIJ

我要打印。

1
2
3
4
5
6
7
8
9
10
A
B
C
D
E
F
G
H
I
J

即水平,字符之间不能编辑为垂直。奖励点是如何在一行中的每个数字旁边放置一个数字。如果这是一个awk或shell脚本,那就太好了,但是我乐于学习新事物。 :)谢谢!


如果您只想将字符串转换为每行一个字符,则只需告诉awk每个输入字符是一个单独的字段,并且每个输出字段都应由换行符分隔,然后重新编译每条记录通过为其分配一个字段:

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

例如:

1
2
3
4
5
6
7
8
9
10
11
12
$ echo"ABCDEFGHIJ" | awk -v FS= -v OFS='\
' '{$1=$1}1'
A
B
C
D
E
F
G
H
I
J

,如果要在每个字符旁边添加字段号,请参见@Kent的解决方案或通向cat -n的管道。

您发布的sed解决方案是不可移植的,并且在某些操作系统上会因某些sed而失败,并且会在sed输出的末尾添加一个不希望的空白行,然后在您连接到cat -n,所以它不是一个很好的选择。您应该接受@Kent的回答。


单线衬套:

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

测试:

1
2
3
4
5
6
7
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

又一个awk

1
2
3
4
5
6
7
8
9
10
11
12
echo"ABCDEFGHIJ" | awk '{gsub(/./,"&\
")}1'
A
B
C
D
E
F
G
H
I
J


所以我自己用sed弄清了这个。

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


这可能对您有用(GNU sed):

1
2
sed 's/\\B/\
/g' <<<ABCDEFGHIJ

行号:

1
2
3
sed 's/\\B/\
/g' <<<ABCDEFGHIJ | sed = | sed 'N;y/\
/ /'

或:

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