【发布时间】:2017-08-16 01:33:40
【问题描述】:
我的原始输入文件是一个预订交易列表。我对两个部分中的行感兴趣:a)交易和 b)退款。 这些始终位于 CSV 的底部并且是结构化的。
我可以通过正则表达式条件 /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
我现在的sn-p:
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/,/^$/不是用 , 替换 Transaktionen 吗? -
在找到 /Transaktionen/ 后,我需要打印以下所有行。给出的代码似乎有效。通过使用 /Transaktionen/ { } 的书,它只打印下一行。
-
抱歉不清楚。 $0 是整行,您当然可以将它用于 $1,它是第一个元素(字段)。添加一条记录(我猜你的意思是字段)14 美元,但只打印部分字段(13 个中的 9 个)。提供一小部分来源和预期结果将有助于[无法访问您的链接]
-
您提供了一些输入,但没有任何输出,您的信息和脚本 sn-p 相当混乱。例如。 $1 怎么是空的 -- if ($1 == "" || $6 != "sum") ?您的 FS 是什么让这种情况发生?
-
edit 你的问题显示简洁、可测试的输入和与该输入相关的所需输出,两者都使用编辑器
{}按钮正确格式化。现在你的问题很不清楚。永远不要使用范围 btw (/start/,/end/),因为它们使琐碎的脚本变得非常简短,但考虑到最小的需求变化,需要完全重写或复制条件。始终使用标志变量 (/start/{f=1} f{print} /end/{f=0})。
标签: regex awk multiple-conditions