0

我有一个字符串

ABCDEFGHIJ

我希望它打印出来。

A
B
C
D
E
F
G
H
I
J

即水平,字符之间没有编辑到垂直。如何用单行在每个数字旁边放置一个数字的奖励积分。如果这是一个 awk 或 shell 脚本,那就太好了,但我愿意学习新事物。:) 谢谢!

4

5 回答 5

4

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

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

例如:

$ 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 解决方案是不可移植的,并且在某些操作系统上会因某些 sed 而失败,并且它会在您的 sed 输出的末尾添加一个不需要的空白行,然后它将成为您的管道之后的尾随行号,cat -n因此它不是不错的选择。您应该接受@Kent 的回答。

于 2013-08-18T14:03:58.457 回答
3

awk 单线:

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
于 2013-08-18T12:57:48.763 回答
1

再来一个awk

echo "ABCDEFGHIJ" | awk '{gsub(/./,"&\n")}1'
A
B
C
D
E
F
G
H
I
J
于 2013-08-19T09:25:53.330 回答
1

所以我用 sed 自己想出了这个。

 sed 's/./&\n/g' horiz.txt > vert.txt
于 2013-08-18T03:55:40.987 回答
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
于 2013-08-18T15:55:35.457 回答