【发布时间】:2014-01-22 10:57:14
【问题描述】:
我正在尝试使用 awk 连续评估两个文件。在第一个文件的末尾,我正在读取一个日期,并将该日期用作评估第二个文件的输入。不幸的是,我在理解如何检测第一个文件的结尾读取日期并继续评估下一个文件时遇到了一些问题。我找到了一些答案,例如 FNR==NR,不幸的是,我无法正确实现它们。我通过硬编码行数来尝试穷人的解决方案。然而,这并不是一件非常聪明的事情。我在处理第二个文件时仍然遇到问题:
BEGIN initalize the counters
{
if(NR==FNR) <<<<<< this is needed to run properly, only NR==FNR fails, why ?!
{
# file_1
do -> from the last line of the first file extract a date
next << what is the meaning of this ??
}
{
# file_2
do -> read every line of the second file
and sum up the values form one of the colums
}
}
END { divide the sum accumulated form file=2
by the time calculated form the last line of file=1}
# for calling the script use :
awk -f SCRIPT file_1 file_2
#example files
# file1 last line
version 1.5 code 11 mpi start /01/12/2014/ 18:33:12 end /01/12/2014/ 20:05:12
#file2
1.28371E-05 0.2060 0.2060 -8 -8 0 0 0
1.91616E-05 0.1927 0.1927 -7 -8 0 0 0
1.27306E-05 0.1567 0.1567 -6 -8 0 0 0
2.11623E-05 0.1523 0.1523 -5 -8 0 0 0
1.67914E-05 0.1721 0.1721 -4 -8 0 0 0
1.47247E-05 0.1851 0.1851 -3 -8 0 0 0
1.32049E-05 0.1919 0.1919 -2 -8 0 0 0
1.81256E-05 0.2130 0.2130 -1 -8 0 0 0
2.63500E-05 0.1745 0.1745 0 -8 0 0 0
1.99232E-05 0.1592 0.1592 1 -8 0 0 0
2.08924E-05 0.1537 0.1537 2 -8 0 0 0
2.44922E-05 0.1459 0.1459 3 -8 0 0 0
2.53759E-05 0.1902 0.1902 4 -8 0 0 0
2.30230E-05 0.1708 0.1708 5 -8 0 0 0
2.10723E-05 0.1636 0.1636 6 -8 0 0 0
1.86613E-05 0.1915 0.1915 7 -8 0 0 0
2.05359E-05 0.1649 0.1649 8 -8 0 0 0
1.09533E-05 0.1765 0.1765 -8 -7 0 0 0
1.56917E-05 0.1740 0.1740 -7 -7 0 0 0
1.52199E-05 0.2145 0.2145 -6 -7 0 0 0
.....
如果有任何帮助,我将不胜感激, 提前谢谢你
亚历克斯
【问题讨论】:
-
听起来你想要的在 awk 中绝对是微不足道的,但请澄清
At the end of the first file I am reading a date的意思,因为有几种可能性,例如您正在从文件中读取它(在这种情况下,为什么不在脚本运行之前执行它)或从变量中获取它(同上)或提示某人输入它或其他内容,适合您的解决方案取决于它是什么你正在这一步做。 -
对于给您带来的不便,我深表歉意。我正在阅读一个文件,比如文件 A。这个文件的末尾包含日期和时间。我读了这段时间,然后继续阅读第二个文件,在那里我将时间用作某些表达式的输入。所以说从第一个文件中提取一个变量,其值用于处理第二个文件。
-
我在回答中发布了,看看这是否就是你所需要的。如果没有,请发布一个脚本来演示您的问题以及一些示例输入和预期输出。您发布的脚本似乎有很多复杂性,与您描述的问题完全无关,因此如果我们不必通读所有这些内容来查看实际问题,它会帮助我们为您提供帮助。跨度>
-
如何将文件传递给 awk?如果你做了
awk -f script.awk file1 file2甚至cat file1 | awk -f script.awk - file2,FNR`,那么每个文件的第一条记录都会是 1。在FNR!=NR&&FNR==1的情况下,您更改了文件,最后读取的记录将是您查找的日期。但是,如果您执行cat file1 file2 | awk -f script.awk,则 FNR!=NR` 永远不会为真,因为标准输入是单个文件,而 awk 将从该文件读取。 -
...仍然没有预期的输出。叹息....
标签: awk end-of-life