几天后,我的awk行动开始了。我寻找字符串“Transaktionen”,然后打印下面的行。但只有我处理我的一个输入文件。如果我处理多个,脚本将停止工作。输出远不是处理一个文件仅输出的内容(它再次进行卷积)。实际上这个部分似乎打破了,因为输出中的输出行没有条件限制或约束:
/^Transaktionen/,/^$/ {print}
我打开这样的输入文件(Windows):
gawk -f 1.awk pay*.csv > neu1.csv
所以,我有一堆pay * .csv文件。在测试中,我将pay1.csv复制到pay2.csv并运行给定的行(上图)neu1.txt是垃圾。如果我单独在pay1.csv上运行给定的行(上面),然后oder pay2.csv一切正常。
我的脚本不允许此工作流程,或者我打开文件的方式错误或我尝试输出的方式。可能会输出每笔付款* .csv> neu * .csv有帮助吗?
这是否足够让您的专家知道脚本不再尊重他的原因了? (我问,因为我的原始输入和脚本可能会令人困惑)。
我在这里发布我使用的实际脚本。我的输入文件(pay * .csv)总是有$ 1 =“Transaktionen”,然后按照我感兴趣的记录。我不明白为什么这个IF Condition / ^ Transaktionen /,/ ^ $ / {all my stuff}打破处理多个文件时。一个肮脏的解决方案可能是用这个awk脚本处理所有输入文件(pay * .csv)并将每个输出文件“输出”到它自己的输出中?我试过这个,但由于没有找到它的命令而失败了。我没有像这样添加:FNR == 1 {out =“new /”FILENAME}; {print> out}'* .txt
/^Transaktionen/,/^$/ {
/./;
NF > 0;
gsub(/\-/,".");
if ((x=index($2," ")) > 0) {
DDMMYY = substr($2,1,x-1);
#minhours = substr($2,x+1,lenght($1));
}
gsub(/\./,"-");
if ($5=="Kunden ID") {next};
if ($6=="Summe") {next};
Buchungstext=($4 " " $5 " " $6);
Belegnummer=substr($4,1,7);
$15=$3;
gsub(/\,/,".");
disgeb = ($10+$11);
if ($3~/Rechnungskauf|Kreditkarte/ && $8~/0.19/) {$16="Erloes";$10="1220";$11=""}
else {$16="Erstattung";$10="";$11="1220"}
#Steuersatz
if ($8~/0.19/) $9="19";
else {disgeb=""; $12=$7};
print DDMMYY FS Buchungstext FS Belegnummer FS $7 FS $9 FS $10 FS $11 FS disgeb FS $12 FS $15 FS $16 FS $20}