如何使用awk读取EOF并逐行解析

如何使用awk读取EOF并逐行解析,awk,Awk,我的文件夹中有几个txt文件,其中包含大量数据。现在我必须通过一次读取每个文件中的一行来创建一个文件。新文件应如下所示: foldername-file1.line1 foldername-file2.line1 fodlername-file3.line1 ...then repeat the cycle fodlername-file1.line2 fodlername-file2.lin2 fodlernam-file3.line2 fodlername-file1.line3 fodl

我的文件夹中有几个txt文件,其中包含大量数据。现在我必须通过一次读取每个文件中的一行来创建一个文件。新文件应如下所示:

foldername-file1.line1
foldername-file2.line1
fodlername-file3.line1
...then repeat the cycle
fodlername-file1.line2
fodlername-file2.lin2
fodlernam-file3.line2

fodlername-file1.line3
fodlername-file2.line3
fodlername-file3.line3
在文件结束之前,我必须连接这些文件

我试过使用sed,但它的性能很差,因为我有很多数据

counter=0
line=$(awk 'NR==n' n=$counter $filename)
echo $line >> $2
我在循环中递增计数器。我不知道如何检查文件的结尾

使用“粘贴”命令,我无法将文件夹名称与每个字符串一起追加,当文件具有不同数量的输入行时,会追加额外的行

我只是自己解决了这个问题,只是想分享解决方案。 我使用了一个脚本,在该脚本中,首先将所需字符串附加到所有行,然后在下面的命令中运行以读取所有字符串 粘贴-d'\n'文件*|awk'{if(length($0)>0){print$0}}}

您可以使用命令并将分隔符设置为换行符

paste -d'\n' file*
以下是它的工作原理:

假设您有以下文件:

$ head f*
==> f1 <==
1
2
3
4
5

==> f2 <==
11
12
13
14
15

==> f3 <==
21
22
23
24
25

谢谢杰帕尔的帮助。这个很好用。唯一的问题是每个文件都位于不同的文件夹中,如:INPUTFILES/FOLDER1/file1、INPUTFILES/FOLDER2/file2、INPUTFILES/FOLDER3/file3。所有这些文件都位于同一主文件夹(INPUTFILES)下。我必须将foldername附加到每一行。最后的输出应该是:FOLDER1-line1 from file1 FOLDER2-line1 from file2 FOLDER3-line1 from file3抱歉,我之前没有提到这一点,因为我认为我可以处理附加文件夹名称的问题,但是使用“粘贴”命令我不知道如何做。Thanks@user3666144您可以结合使用
find
。类似于
paste-d'\n'$(find.-type f-printf“%h/%f”)
。但这需要GNU
find
。再次感谢。给定的命令非常棒,但没有什么问题。它没有给出所需的o/p。数据重复,很少有行像这样的“foldername”-FNR=EOF。我可以使用一个脚本,它不需要在一个命令中。当我们有不同大小的文件时,如何避免在输出文件中添加空行。像file1有3行,file2有10行。在输出中,“粘贴”命令将添加额外的7行,第一个文件中的行数将减少。所以输出文件有3+10+7个白色lines@user3666144你似乎有很多新的要求。我建议你关闭这个问题,然后打开一个新的问题,在那里你可以清楚地列出你的所有要求。@TomFenech我只是对建议的编辑做了一些小的修改,我认为OP问题不适合这些评论,这是MSE的目的。加上你的编辑在我看来变化太大了。OP指的是您现在已删除的sed。
$ paste -d'\n' f*
1
11
21
2
12
22
3
13
23
4
14
24
5
15
25