Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex awk两个正则表达式条件-结构复杂事务列表csv_Regex_Awk_Multiple Conditions - Fatal编程技术网

Regex awk两个正则表达式条件-结构复杂事务列表csv

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" || " "

我的原始输入文件是预订交易列表。我对两部分中的行感兴趣:a)交易和b)退款。 这些始终位于CSV的底部,并且是结构化的

我可以通过regex条件/transaction/{print}跳过事务部分上面的所有行

我想添加一列字符串“交易或退款”,具体取决于csv中的部分。所以我知道cloumn是交易还是退款。差不多

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}
)。