私のオリジナル入力ファイルは予約トランザクションリストです。私は2つのセクションにあるラインに興味があります:a)取引とb)払い戻し。 これらは常にCSVの下部にあり、構造化されています。awk 2つの正規表現条件 - 複雑な構造の複雑なトランザクションリストcsv
regex condition/transaction/{print}を使用して、セクショントランザクションの上のすべての行をスキップできます。
csvのセクションに応じて、「トランザクションまたは払い戻し」という文字列を含む列を追加したいとします。だから私はcloumnが取引か払い戻しかどうか知っています。
IF ($2 = "transaction" || " " != "refunds"){$7=="transaction"};
IF ($2 = "refunds" || " " != "transaction"){$7=="refunds"}
のようなもの、私は私のgdriveにCSVやscript.awkを共有し、これは許容可能であると思います: convoluted transaction list to be structured
transaction date via Details payment fee
28-02-2015 invoice txn1 44.1 0.19
28-02-2015 invoice txn2 27.7 0.19
07-03-2015 invoice txn3 43.1 0.19
09-03-2015 invoice txn4 36.8 0.19
12-03-2015 invoice txn5 26 0.19
13-03-2015 invoice txn6 43.7 0.19
13-03-2015 invoice txn7 25.6 0.19
15-03-2015 creditcard txn8 70.8 0.19
Sum 317.8 1.52
refunds Datum via Details payment 1.52
18-12-2014 invoice txn0 16
Sum 16
私の意図した結果がこれです:
date via Details payment fee type
28-02-2015 invoice txn1 44.1 0.19 transaction
28-02-2015 invoice txn2 27.7 0.19 transaction
07-03-2015 invoice txn3 43.1 0.19 transaction
09-03-2015 invoice txn4 36.8 0.19 transaction
12-03-2015 invoice txn5 26 0.19 transaction
13-03-2015 invoice txn6 43.7 0.19 transaction
13-03-2015 invoice txn7 25.6 0.19 transaction
15-03-2015 creditcard txn8 70.8 0.19 transaction
18-12-2014 invoice txn0 16 refund
現時点での私のスニペット:
BEGIN {OFS=FS=";"
print {date,payment option,detailspayment,fee,type }
/^transactions/,/^$/{
if ($3=="via) {next};
if ($6=="Sum") {next};
print $2 FS $3 FS $4 FS $5 FS $6 FS $7;
}
私は最後にawkを使っていましたが、この行は '/^Transaktionen /、/^$ /'ではありません。 – user2141046
/Transaktionen /が見つかった後、次の行をすべて印刷する必要がありました。与えられたコードはうまくいくようです。/Transaktionen/{}を使った本では、次の行だけが表示されていました。 – prestalearner
ごめんなさい。 $ 0は完全な行で、1番目の要素(フィールド)である$ 1に使用します。レコードを追加する(あなたが推測するフィールドを意味する)$ 14が、部分フィールドのみが印刷されます(13のうち9つ)。小さなソースのサンプルを与えると結果が助けになる[あなたのリンクへのアクセスはありません] – NeronLeVelu