私は、SED にとって単純であるように見える何かで立ち往生しています。
別のアプリケーションから取得した (一種の) CSV ファイルがあるため、その出力を制御できません。いくつかの前処理は SED で既に行われていますが、最後の処理で行き詰まっています。そのため、3 番目のアプリケーションの使用を避けるために、可能であれば SED で実行したいと考えています。
問題は、ファイルの見出し行 (最初の行) がファイルに沿って繰り返されることですが、残念ながら次のような特徴があります。
- 各 CSV ファイルの見出しは、以前は不明でした。各ファイルには独自の見出しがあり、互いに異なる場合があります。
- N 行ごとに常に繰り返しが発生するとは限りません (N は既知の固定数です)。
- 他のデータ (見出しではない) 行が繰り返される可能性があるため、維持する必要があります。
したがって、次の 2 つのファイルがあるとします。
現金.csv
Name; Amount
John; 3.55
Erick; 4.76
John; 8.99
Name; Amount
Erick; 4.76
Mark; 1.00
Name; Amount
John; 3.55
チェック.csv
Name; Account; Amount
Erick; 345344; 123.00
Mark; 88849; 323.50
Name; Account; Amount
John; 474473; 99.00
Mark; 88849; 323.50
Mark; 88849; 323.50
John; 474473; 99.00
私が望むのは、各ファイルに適用される単一の SED スクリプトで、次のようになります。
Cash.processed.csv
Name; Amount
John; 3.55
Erick; 4.76
John; 8.99
Erick; 4.76
Mark; 1.00
John; 3.55
Check.processed.csv
Name; Account; Amount
Erick; 345344; 123.00
Mark; 88849; 323.50
John; 474473; 99.00
Mark; 88849; 323.50
Mark; 88849; 323.50
John; 474473; 99.00
削除コマンドのパターンとして SED の「ホールド バッファ」を使用できるかどうか疑問に思っていました。
1h #Hold the first line (headings)
/\h/d #Use hold buffer as a pattern to delete
「\h」が保留バッファを削除コマンドに返すと仮定します。
返信ありがとうございます。
PS: 次の過度に具体的なコマンドで答えないでください:
1p;/Name; Amount\|Name; Account; Amout/d