Regex awk两个正则表达式条件-结构复杂事务列表csv
我的原始输入文件是预订交易列表。我对两部分中的行感兴趣:a)交易和b)退款。 这些始终位于CSV的底部,并且是结构化的 我可以通过regex条件/transaction/{print}跳过事务部分上面的所有行 我想添加一列字符串“交易或退款”,具体取决于csv中的部分。所以我知道cloumn是交易还是退款。差不多Regex awk两个正则表达式条件-结构复杂事务列表csv,regex,awk,multiple-conditions,Regex,Awk,Multiple Conditions,我的原始输入文件是预订交易列表。我对两部分中的行感兴趣:a)交易和b)退款。 这些始终位于CSV的底部,并且是结构化的 我可以通过regex条件/transaction/{print}跳过事务部分上面的所有行 我想添加一列字符串“交易或退款”,具体取决于csv中的部分。所以我知道cloumn是交易还是退款。差不多 IF ($2 = "transaction" || " " != "refunds"){$7=="transaction"}; IF ($2 = "refunds" || " "
IF ($2 = "transaction" || " " != "refunds"){$7=="transaction"};
IF ($2 = "refunds" || " " != "transaction"){$7=="refunds"}
我在我的gdrive上共享CSV和script.awk,希望这是可以接受的:
通过详细信息支付费用的交易日期
2015年2月28日发票txn1 44.1 0.19
2015年2月28日发票txn2 27.7 0.19
07-03-2015发票txn3 43.1 0.19
2015年3月9日发票txn4 36.8 0.19
2015年3月12日发票txn5 26 0.19
2015年3月13日发票txn6 43.7 0.19
2015年3月13日发票txn7 25.6 0.19
2015年3月15日信用卡txn8 70.80.19
总额317.8 1.52
通过详情付款1.52退款数据
2014年12月18日发票txn0 16
总和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
我通过column-t
运行此命令,以便对列进行排列,不过这会删除退款前添加的换行符。另一个区别是用于退款“费用”的破折号,这是列-t
正常工作所必需的
在awk代码中,如果记录数(行号,NR
)为1,则删除第一项并打印剩余项加上“type”,然后转到下一行。如果该行以“退款”开头,那么我们打印一个空行,然后将类型更改为“退款”(因为没有费用,所以我们用破折号表示)。最后,如果我们有前导空格,并且字段(NF
)的数量为4+,我们将打印行和类型
如果在操作内的命令之间使用分号,则awk代码可以全部在一行中
产出:
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
我通过column-t
运行此命令,以便对列进行排列,不过这会删除退款前添加的换行符。另一个区别是用于退款“费用”的破折号,这是列-t
正常工作所必需的
在awk代码中,如果记录数(行号,NR
)为1,则删除第一项并打印剩余项加上“type”,然后转到下一行。如果该行以“退款”开头,那么我们打印一个空行,然后将类型更改为“退款”(因为没有费用,所以我们用破折号表示)。最后,如果我们有前导空格,并且字段(NF
)的数量为4+,我们将打印行和类型
如果在操作中的命令之间使用分号,则awk代码可以全部在一行上。自从我上次使用awk已经有一段时间了,但这一行不是
/^Transaktionen/,/^$/
将Transaktionen替换为吗?在找到/Transaktionen/后,我需要打印以下所有行。给出的代码似乎有效。根据使用/Transaktionen/{}的书,它只打印下一行。对不起,不清楚$0是整行,您当然会将其用于$1,这是第一个元素(字段)。添加一个记录(我想你们是指字段)14美元,但只打印部分字段(13个字段中的9个)。给出一个源代码和预期结果的小样本将有助于[无法访问您的链接]。您提供了一些输入,但没有任何输出,您的信息和脚本片段非常混乱。$1怎么会像--if($1==“”“| |$6!=”sum“)中那样是空的??什么是您的FS允许这种情况?您的问题是如何显示简洁、可测试的输入以及与该输入相关联的所需输出,这两种输出都使用编辑器{}
按钮正确格式化。现在你的问题很不清楚。请不要使用范围(btw)(/start/,/end/
),因为它们使琐碎的脚本变得非常简短,但如果需求变化最小,则需要完全重写或复制条件。始终使用一个标志变量(/start/{f=1}f{print}/end/{f=0}
)。自从我上次使用awk已经有一段时间了,但是这一行不是/^Transaktionen/,/^$/
将Transaktionen替换为吗?在找到/Transaktionen/之后,我需要打印以下所有行。给出的代码似乎有效。根据使用/Transaktionen/{}的书,它只打印下一行。对不起,不清楚$0是整行,您当然会将其用于$1,这是第一个元素(字段)。添加一个记录(我想你们是指字段)14美元,但只打印部分字段(13个字段中的9个)。给出一个源代码和预期结果的小样本将有助于[无法访问您的链接]。您提供了一些输入,但没有任何输出,您的信息和脚本片段非常混乱。$1怎么会像--if($1==“”“| |$6!=”sum“)中那样是空的??什么是您的FS允许这种情况?您的问题是如何显示简洁、可测试的输入以及与该输入相关联的所需输出,这两种输出都使用编辑器{}
按钮正确格式化。现在你的问题很不清楚。请不要使用范围(btw)(/start/,/end/
),因为它们使琐碎的脚本变得非常简短,但如果需求变化最小,则需要完全重写或复制条件。始终使用标志变量(/start/{f=1}f{print}/end/{f=0}
)。