我有一个字符串
ABCDEFGHIJ
我希望它打印出来。
A
B
C
D
E
F
G
H
I
J
即水平,字符之间没有编辑到垂直。如何用单行在每个数字旁边放置一个数字的奖励积分。如果这是一个 awk 或 shell 脚本,那就太好了,但我愿意学习新事物。:) 谢谢!
我有一个字符串
ABCDEFGHIJ
我希望它打印出来。
A
B
C
D
E
F
G
H
I
J
即水平,字符之间没有编辑到垂直。如何用单行在每个数字旁边放置一个数字的奖励积分。如果这是一个 awk 或 shell 脚本,那就太好了,但我愿意学习新事物。:) 谢谢!
如果您只想将字符串转换为每行一个字符,您只需要告诉 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 的回答。
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
再来一个awk
echo "ABCDEFGHIJ" | awk '{gsub(/./,"&\n")}1'
A
B
C
D
E
F
G
H
I
J
所以我用 sed 自己想出了这个。
sed 's/./&\n/g' horiz.txt > vert.txt
这可能对您有用(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