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的解决方案或通向
您发布的sed解决方案是不可移植的,并且在某些操作系统上会因某些sed而失败,并且会在sed输出的末尾添加一个不希望的空白行,然后在您连接到
单线衬套:
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 |