2011-11-08 11 views
0

私は、各行に16バイトを超えないように書式設定する必要がある非常に大きな文字列を持っています。 forループを使用して16バイトまで上がったが、残りの文字列を解析するスクリプトが停止した。私は次の16バイトが次の行に続くように、16行目の後に新しい行を追加する必要があります。awkを使用して出力をフォーマットする

$ echo "45a000531ee1000036118b9472041523cb5c8701084b084b003ff3443213002f8445f0a4a3d7000001800e291053dbe7157faa3ea02f850004720415238500047cc3685387000c020b921f7196979774f9000000" 
| sed 's/../ &/g' | sed 's/^ //' 
| awk 'ORS="\n"{ for (i=1; i<17;i++) printf ("%s ", $i)}' 
45 a0 00 53 1e e1 00 00 36 11 8b 94 72 04 15 23 

ソリューション:(提供:クリス)

awk 'NF{gsub(/.{16}/,"&\n",$0);print $0}' text | sed 's/../ &/g' | sed 's/^ //g'  
45 a0 00 53 1e e1 00 00  
36 11 8b 94 72 04 15 23  
cb 5c 87 01 08 4b 08 4b  
00 3f f3 44 32 13 00 2f  
84 45 f0 a4 a3 d7 00 00  
01 80 0e 29 10 53 db e7  
15 7f aa 3e a0 2f 85 00  
04 72 04 15 23 85 00 04  
7c c3 68 53 87 00 0c 02  
0b 92 1f 71 96 97 97 74  
f9 00 00 00 

答えて

4

試してみてください。

コマンド:

echo "yourLongString" | sed 's/.\{16\}/&\n/g' 

出力:

45a000531ee10000 
36118b9472041523 
cb5c8701084b084b 
003ff3443213002f 
8445f0a4a3d70000 
01800e291053dbe7 
157faa3ea02f8500 
0472041523850004 
7cc3685387000c02 
0b921f7196979774 
f9000000 

EDIT:

かのgawkと:

gawk 'NF{gsub(/.{16}/,"&\n",$0);print $0}' 

HTHクリス

+0

おかげでクリス。あなたはこれのawkの実装をお勧めしますか? –

+1

私の編集した答えを見てください。 – Chris

+0

パーフェクト。魅力のように働く! –

2

foldは長い行を折る:

fold -b16 | sed 's/../& /g' 
+0

かなりクールだ。前に折り畳みをしていない+1 :) –

関連する問題