我有一个字符串
ABCDEFGHIJ
我想要打印。
A
B
C
D
E
F
G
H
I
J
即水平,字符与垂直之间无编辑。关于如何在一行旁边放一个数字的奖励点。如果这是一个awk或shell脚本会很好,但我愿意学习新东西。 :)谢谢!
答案 0 :(得分:3)
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