awk-处理多个文件时,条件/模式{…}停止工作

awk-处理多个文件时,条件/模式{…}停止工作,awk,Awk,几天后,我的awk行动开始了。我查找字符串“Transaktionen”,然后打印以下行。但前提是我处理一个输入文件。如果我处理多个,脚本将停止工作。输出与仅处理一个文件的输出相差甚远(它再次被卷积)。实际上,这一部分似乎中断了,因为输出中的输入显示的行不受此条件或约束: /^Transaktionen/,/^$/ {print} 我按如下方式打开输入文件(Windows): 所以,我有一堆pay*.csv文件。在一个测试中,我将pay1.csv复制到pay2.csv,并运行给定的行(上面)n

几天后,我的awk行动开始了。我查找字符串“Transaktionen”,然后打印以下行。但前提是我处理一个输入文件。如果我处理多个,脚本将停止工作。输出与仅处理一个文件的输出相差甚远(它再次被卷积)。实际上,这一部分似乎中断了,因为输出中的输入显示的行不受此条件或约束:

/^Transaktionen/,/^$/ {print}
我按如下方式打开输入文件(Windows):

所以,我有一堆pay*.csv文件。在一个测试中,我将pay1.csv复制到pay2.csv,并运行给定的行(上面)neu1.txt是垃圾。如果我分别在pay1.csv和order pay2.csv上运行给定的行(如上所示),则一切正常

我的脚本不允许此工作流,或者我打开文件的方式错误,或者我尝试输出文件的方式错误。可能正在输出每个pay*.csv>neu*.csv是否有帮助

这些信息是否足够让你们的专家们推断出剧本不再尊重他的条件的原因?(我这样问是因为我的原始输入和脚本可能会令人困惑)


我在这里发布我实际使用的脚本。我的输入文件(pay*.csv)总是包含在$1=“Transaktionen”中,然后遵循我感兴趣的记录。我不明白为什么在处理多个文件时,如果条件/^Transaktionen/,/^$/{all my stuff}发生中断,则会出现这种情况。肮脏的解决方案可能是使用此awk脚本处理所有输入文件(pay*.csv)并将每个文件“输出”到自己的输出?我尝试了这个,但由于找不到它的命令而失败。我没有添加这样的内容:FNR==1{out=“new/”FILENAME};{打印>输出}'*.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}

1.检查每个.csv文件中
^Transaktionen
之后是否有空字符串。因为
/^$/
表示“空行”。2.查看csv文件中使用的回车符。如果它是windows
\r\n
,请尝试使用
/^\r$/
而不是
/^$/
.1。我以前告诉过你(请参阅下面的注释)不要使用范围表达式。2.你认为
/./
NF>0
在动作块中做什么?3.我相信大家已经听说过很多次了,请发布简明的、可测试的样本输入和预期输出,以便我们能够尽力帮助您。4.这一次,听你得到的建议,如果你不理解,就提问,而不是忽略它。我可能是一个自以为是的人,但我几天前开始使用awk,我不是编码员。我不知道如何解决这个问题。莫顿先生告诉我不要使用范围表达式。。。那还有什么?它们不是我发明的。我在这里询问如何从保存字段X的X行打印行。在我的例子中,如果$1有“Transaktionen”,则跳过这一行并打印所有其他行,但如果$1为空,则将其删除。我问了一下,有人告诉我你在上面的代码中找到了什么。如果我在多个输入文件上运行该命令,它就不起作用了:(因此,我查找了标记的条件,但也遇到了相同的输出问题。那么如何处理呢?
    /^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}