プレーンテキスト情報をcsvまたはExcelに変換する

プレーンテキスト情報をcsvまたはExcelに変換する

同様のデータを含むファイルがありますが、同様の方法でクリーンアップしようとしています。詳細は次のとおりです。コンテキストの変数に基づいてスクリプトを変更しましたが、目的の結果が得られませんでした。それはおそらくawkの知識が欠けていて、スクリプトの知識が不足しているからです。

Virtual_Machine  OL6U6  
Vdisk  0004fb00001200005e2ca2d2c7fc2d6f.img size 46GB
Vdisk  0004fb0000120000597ab28f2b6493f8.img size 51GB
Vdisk  0004fb00001200003edc9a2ae9cd5aa6.img size 31GB
Physical_Disk  IBM (796)
device /dev/mapper/dm-0
shareddisk true
Physical_Disk  IBM (829)
device /dev/mapper/dm-1
shareddisk true
Physical_Disk  IBM (830)
device /dev/mapper/dm-2
shareddisk true
Physical_Disk  IBM (742)
device /dev/mapper/dm-3
shareddisk true

以下の形式でインポートしようとします。これには2つの条件があります。 M = 物理ディスク数 N = V ディスク数 M > N の場合 Virtual_Machine の行数 = MM < N の場合 Virtual_Machine の行数 = N

Virtual Machine      Vdisk                                     size           Physical_Disk    device              shareddisk
OL6U6               0004fb00001200005e2ca2d2c7fc2d6f.img       46GB           IBM (796)        /dev/mapper/dm-0     true
OL6U6               0004fb0000120000597ab28f2b6493f8.img       51GB           IBM (829)        /dev/mapper/dm-1     true
OL6U6               0004fb00001200003edc9a2ae9cd5aa6.img       31GB           IBM (830)        /dev/mapper/dm-2     true
OL6U6               -                                         -              IBM (742)         /dev/mapper/dm-2     true

アドバイスしてください。

ありがとう、ダルシャン

答え1

本のタイトル、年、および論文の配列を維持し、awkを使用してこれを行うことができます。あなたの例では、論文に年がないので、2番目の列にタイトルとしてのみリストされます。

例は次のとおりです。

#!/usr/bin/awk -f
function finish() {
    rows = book;
    if (rows < paper) rows = paper;
    for (n = 0; n <= rows; ++n) {
            printf "%-15s %-25s %-8s %s\n",
            author,
            n <= book ? books[n] : "-",
            n <= book ? years[n] : "-",
            n <= paper ? papers[n] : "-";
    }
    book = -1;
    paper = -1;
}
BEGIN {
    author = "?";
    book = -1;
    paper = -1;
    printf "Author          Books                     year     Papers\n";
}
/^[[:space:]]*Author[[:space:]]/ {
    finish();
    author = $0;
    sub("^[^[:space:]]+[[:space:]]+", "", author);
    sub("[[:space:]]+$", "", author);
    next;
}
/^[[:space:]]*(e)?paper[[:space:]]/ {
    ++paper;
    item = $0;
    sub("^[^[:space:]]+[[:space:]]+", "", item);
    sub("[[:space:]]+$", "", item);
    papers[paper] = item;
    next;
}
/^[[:space:]]*([eE])?[bB]ook[[:space:]].*year[[:space:]]+[[:digit:]]+[[:space:]]*$/ {
    ++book;
    item = $0;
    sub("^[^[:space:]]*[[:space:]]*", "", item);
    sub("[[:space:]]+$", "", item);
    title = item;
    sub("[[:space:]]*year[[:space:]]+[[:digit:]]+$", "", title);
    year = item;
    sub("^.*year[[:space:]]+", "", year);
    books[book] = title;
    years[book] = year;
    next;
}
END {
    finish();
}

出力:

$ ./foo <foo.in
Author          Books                     year     Papers
E. Narayanan    Astrophysics              2001     Intelligent Transportation
E. Narayanan    General Mechanics         2010     Nanotechnology Magazine
E. Narayanan    Nuclear physics           2011     -
R Ramesh        Organic Chemistry         2007     Ionic Batteries
R Ramesh        Physical chemistry        2008     solar photocatalytic oxidation processes
R Ramesh        -                         -        Biological oxidation

関連情報