0

チャールズ・ダフィーのリクエストにより、より狭い焦点でこれを再作成しました.

次のような CSV ファイルがあります。

Security Policy: Blahblahblah,,,,,,,,,
12,,host_A,net-B,https,drop,Log,Any,Any,comments
13,,host_A,net-B,smtp,drop,Log,Any,Any,comments
14,,host_A,net-B,http,accept,Log,Any,Any,comments 
,,net-C,,,,,,,
,,net-D,,,,,,,
15,,host_A,net-B,http,accept,Log,Any,Any,comments
,,host_B,net-C,service_X,,,,,
,,host_C,net-D,service_y,,,,,
,,host_D,,,,,,,
,,host_E,,,,,,,

各値を個別に解析する必要がありますが、それぞれのステートメントに $1 を含める必要があります。ご覧のとおり、これは 13 と 14 では簡単ですが、14 と 15 の列が空白 (子) の場合は深刻な問題になります。

これをループする最良の方法は何ですか?

たとえば、出力を次のようにしたいと思います。

'text goes here' $1 'more text' $3 'more text'
'text goes here' $1 'more text' $4 'more text'

実数値の使用 (15 の場合):

'text goes here' 15 'more text' host_A 'more text'
'text goes here' 15 'more text' host_B 'more text'
'text goes here' 15 'more text' host_C 'more text'
'text goes here' 15 'more text' host_D 'more text'
'text goes here' 15 'more text' host_E 'more text'
'text goes here' 15 'other text' net-B 'more text'
'text goes here' 15 'other text' net-C 'more text'
'text goes here' 15 'other text' net-D 'more text'
'text goes here' 15 'text' http 'more text'
'text goes here' 15 'text' service_X 'more text'
'text goes here' 15 'text' service_y'more text'

などなど。

ありがとうございました、

4

2 に答える 2

1

あなたの質問はあなたが何を望んでいるのかをうまく説明していないので、私は本当に推測していますが、あなたが探しているのはこのようなものです:

$ cat file
Security Policy: Blahblahblah,,,,,,,,,
12,,host_A,net-B,https,drop,Log,Any,Any,comments
13,,host_A,net-B,smtp,drop,Log,Any,Any,comments
14,,host_A,net-B,http,accept,Log,Any,Any,comments
,,net-C,,,,,,,
,,net-D,,,,,,,
15,,host_A,net-B,http,accept,Log,Any,Any,comments
,,host_B,net-C,service_X,,,,,
,,host_C,net-D,service_y,,,,,
,,host_D,,,,,,,
,,host_E,,,,,,,

$ awk -f tst.awk file
12  host_A net-B https drop Log Any Any comments
13  host_A net-B smtp drop Log Any Any comments
14  host_A net-B http accept Log Any Any comments
14  net-C net-B http accept Log Any Any comments
14  net-D net-B http accept Log Any Any comments
15  host_A net-B http accept Log Any Any comments
15  host_B net-C service_X accept Log Any Any comments
15  host_C net-D service_y accept Log Any Any comments
15  host_D net-B http accept Log Any Any comments
15  host_E net-B http accept Log Any Any comments

$ cat tst.awk
BEGIN{ FS="," }
NR==1 { next }
$1 != "" { split($0,dflt) }
{ for (i=1;i<=NF;i++) if ($i == "") $i = dflt[i]; print }
于 2013-04-03T17:17:46.250 に答える