次の形式のファイルがあります。
abc|xyz|mno
x up x
up up x
x x up
abc|xyz|mno
x x x
up x x
....
....
デフォルトでは、ファイルの最初の行はデバイス名、(|ed)
次の行はデバイスの状態です。
出力を次の形式にしたいと思います。
abc,x|xyz,up|mno,x
abc,up|xyz,up|mno,x
abc,x|xyz,x|mno,up
abc,x|xyz,x|mno,x
abc,up|xyz,x|mno,x
....
....
アドバイスはありますか?
ベストアンサー1
CPANのモジュールperl
で使用できる場合:List::MoreUtils
$ perl -MList::MoreUtils=pairwise -F'\|' -anle '
print and next if /^$/;
@dev = @F and next if @F > 1;
print join "|", pairwise {"$a,$b"} @dev,@{[split]};
' file
abc,x|xyz,up|mno,x
abc,up|xyz,up|mno,x
abc,x|xyz,x|mno,up
abc,x|xyz,x|mno,x
abc,up|xyz,x|mno,x
外部モジュールを使用したくない場合:
$ perl -F'\|' -anle '
print and next if /^$/;
@dev = @F and next if @F > 1;
@state = split;
print join "|", map {"$dev[$_],$state[$_]"} 0..$#dev;
' file