使用awk比较文件中两行的对应值

使用awk比较文件中两行的对应值,awk,Awk,我有一个文件中两行的行位置,即line1和line2。这些行可能在文件中的任何位置,但我可以使用基于名称的搜索关键字访问行位置每行的第一个单词 20160801表示yyyymmdd,其关联值由| 我需要比较给定两行中与每个日期相关的值 我是awk的新手。我不知道如何同时比较这两行。你的问题一点也不清楚。也许第一步是清楚地阐明我试图解决的问题是什么;2我需要什么工具或数据来解决它 由于您的问题陈述没有明确阐述,因此我只能针对您的问题提供以下提示: 在awk中,您可以使用测试FNR==NR来比较两个

我有一个文件中两行的行位置,即line1和line2。这些行可能在文件中的任何位置,但我可以使用基于名称的搜索关键字访问行位置每行的第一个单词

20160801表示yyyymmdd,其关联值由| 我需要比较给定两行中与每个日期相关的值


我是awk的新手。我不知道如何同时比较这两行。

你的问题一点也不清楚。也许第一步是清楚地阐明我试图解决的问题是什么;2我需要什么工具或数据来解决它

由于您的问题陈述没有明确阐述,因此我只能针对您的问题提供以下提示:

在awk中,您可以使用测试FNR==NR来比较两个不同的文件,该测试仅在第一个文件上为真

您可以使用格式为/^name1/的正则表达式来查找关键字,它表示以该模式开头的行

通过将字段分隔符设置为该分隔符,可以在awk中对分隔符进行拆分-在本例中,我认为这听起来像是|但是您也在比较这些字段中以空格分隔的字段

您可以通过保存第一行中的数据并与另一个文件中第二行中的数据进行比较,一旦您能够清楚地说明“比较”对您意味着什么

考虑到:

name1   20160801|76 20160802|67 20160803|49 20160804|35 20160805|55 20160806|76 20160807|77 20160808|70 2016089|50  20160810|75 20160811|97 20160812|90 20160813|87 20160814|99 20160815|113    20160816|83 20160817|57 20160818|158    20160819|61 20160820|46 20160821|1769608    20160822|2580938    20160823|436093 20160824|75 20160825|57 20160826|70 20160827|97 20160828|101    20160829|96 20160830|95 20160831|89 
name2   20160801|32413  20160802|37707  20160803|32230  20160804|31711  20160805|32366  20160806|35532  20160807|36961  20160808|45423  2016089|65230   20160810|111078 20160811|74357  20160812|71196  20160813|71748  20160814|77001  20160815|91687  20160816|92076  20160817|89706  20160818|126690 20160819|168587 20160820|207128 20160821|221440 20160822|234594 20160823|200963 20160824|165231 20160825|139600 20160826|145483 20160827|209013 20160828|228550 20160829|223712 20160830|217959 20160831|169106 
您可以找到有问题的行,如下所示:

$ cat /tmp/f1.txt
name1   20160801|76 20160802|67 20160803|49 20160804|35 20160805|55 20160806|76 20160807|77 20160808|70 2016089|50  20160810|75 20160811|97 20160812|90 20160813|87 20160814|99 20160815|113    20160816|83 20160817|57 20160818|158    20160819|61 20160820|46 20160821|1769608    20160822|2580938    20160823|436093 20160824|75 20160825|57 20160826|70 20160827|97 20160828|101    20160829|96 20160830|95 20160831|89 
$ cat /tmp/f2.txt
name2   20160801|32413  20160802|37707  20160803|32230  20160804|31711  20160805|32366  20160806|35532  20160807|36961  20160808|45423  2016089|65230   20160810|111078 20160811|74357  20160812|71196  20160813|71748  20160814|77001  20160815|91687  20160816|92076  20160817|89706  20160818|126690 20160819|168587 20160820|207128 20160821|221440 20160822|234594 20160823|200963 20160824|165231 20160825|139600 20160826|145483 20160827|209013 20160828|228550 20160829|223712 20160830|217959 20160831|169106
为了清晰起见,我只打印了第一个字段


然后用它来比较。将第一个保存在关联数组中,然后在找到第二个时进行比较

我不明白。1每个文件的name1和name2值是否唯一?i、 例如,每个文件超过1个?您是否只需要在文件1中查找名称1,在文件2中查找名称2,并比较每行中的日期字符串?名称1名称2在整个文件中都是唯一的。每行有31天。“下一天”是当天的管道分隔值。我需要比较两行中天数的对应值。每行有31天的一个月。所以日期和他们在文件中的位置是相同的比较和做什么?你的预期产出是多少?你刚才不是在问这个吗?在打开一个明显相同的答案之前,就您收到的该问题的多个答案提供一些反馈如何?
$ awk -F"|" '/^name/ && FNR==NR {print $1}' f1.txt f2.txt
name1   20160801
$ awk -F"|" '/^name/ && FNR<NR {print $1}' f1.txt f2.txt
name2   20160801