2013-08-18 26 views
0

我有一個字符串製作水平字符串垂直殼或AWK

ABCDEFGHIJ 

我想它來打印。

A 
B 
C 
D 
E 
F 
G 
H 
I 
J 

即水平,字符之間不會編輯垂直。如何用一條線將每個數字旁邊的數字加起來的獎勵分數。如果這是一個awk或shell腳本,那很好,但我很樂意學習新事物。 :) 謝謝!

+0

http://stackoverflow.com/questions/8563745/loop-over-characters-in-input-string-using-awk –

+0

謝謝,我也想了很多搞亂之後我自己。 – jeffpkamp

+0

@EliRose - 在你引用的問題中接受的答案几乎在每一行都有錯誤,所有新手錯誤。你不應該把它作爲參考。 –

回答

2

如果你只是想將一個字符串轉換爲一個字符,每行,你只需要告訴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 

,如果你想旁邊的每個字符字段號碼,請@肯特的解決方案或管cat -n

您發佈的sed解決方案是不可移植的,並且在某些操作系統上會失敗並出現一些seds,並且會在您的sed輸出結尾添加一個不需要的空白行,然後這些空行將變爲管道後的尾行號cat -n所以它不是一個好的選擇。你應該接受@肯特的答案。

0

所以我用sed自己想出了這一個。

sed 's/./&\n/g' horiz.txt > vert.txt 
+0

添加了貓-n添加我想要的數字。 – jeffpkamp

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 
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 
1

還有一個AWK

echo "ABCDEFGHIJ" | awk '{gsub(/./,"&\n")}1' 
A 
B 
C 
D 
E 
F 
G 
H 
I 
J 
+0

這與發佈相似的sed腳本具有相同的問題,因爲它會在輸出結尾添加尾隨空行。 –