0

各行に,. 各番号で何らかの操作をしたかっただけです。awk で簡単そうに見えたのですが、なぜか行き詰まってしまいました。各行を分割するために使用している配列は、最初の行で一度だけ初期化されています。その後、配列は明確になりません。split は、最初に配列をクリアしてから使用することになっていdelete arrayます。しかし、それでも問題は解決しません。どんな助けでも大歓迎です。
以下に例を示します。これはサンプルファイルです

[[bash_prompt$]]$ cat log
1,2,3
2
9
1,4
5,7
7
8
6,2

これは私が得ているものです

[[bash_prompt$]]$ awk '{print "New Line " $1; delete a; split($1,a,","); for(var in a){ print "Array Element " var; } }' log
New Line 1,2,3
Array Element 1
Array Element 2
Array Element 3
New Line 2
Array Element 1
New Line 9
Array Element 1
New Line 1,4
Array Element 1
Array Element 2
New Line 5,7
Array Element 1
Array Element 2
New Line 7
Array Element 1
New Line 8
Array Element 1
New Line 6,2
Array Element 1
Array Element 2

しかし、以下は私が期待しているものです

[[bash_prompt$]]$ awk '{print "New Line " $1; delete a; split($1,a,","); for(var in a){ print "Array Element " var; } }' log
New Line 1,2,3
Array Element 1
Array Element 2
Array Element 3
New Line 2
Array Element 2
New Line 9
Array Element 9
New Line 1,4
Array Element 1
Array Element 4
New Line 5,7
Array Element 5
Array Element 7
New Line 7
Array Element 7
New Line 8
Array Element 8
New Line 6,2
Array Element 6
Array Element 2

私のはGNU Awk 3.1.5です。また、シェルとawkの組み合わせを使用して別の方法を見つけました(awkを各行で個別に実行しています)が、何が間違っているのか知りたいです

4

2 に答える 2

0

split()フィールドセパレータを設定するだけで使用する必要はありません:

awk -F, '{print "New Line",$0;for(i=1;i<=NF;i++)print "Array Element",$i}' log
New Line 1,2,3
Array Element 1
Array Element 2
Array Element 3
New Line 2
Array Element 2
New Line 9
Array Element 9
New Line 1,4
Array Element 1
Array Element 4
New Line 5,7
Array Element 5
Array Element 7
New Line 7
Array Element 7
New Line 8
Array Element 8
New Line 6,2
Array Element 6
Array Element 2
于 2013-05-03T11:50:39.103 に答える