尝试使用awk
在同一行file1
中查找file2
中的字符串(总是只有1个字段)。也就是说,如果在file1
中使用了第1行,则file2
中仅使用第1行。由于可能缺少值,因此需要进行检查以确保其存在。这只是一个想法,所以可能有更好的方法,但我只是想看。谢谢你:)。
文件1
R_2017_01_13_12_11_56_user_S5-00580-24-Medexome
R_2017_01_13_14_46_04_user_S5-00580-25-Medexome
file2的
The oldest folder is R_2017_01_13_12_11_56_user_S5-00580-24-Medexome, created on 2017-01-17+11:31:02.5035483130 and analysis done using v1.4 by cmccabe at 01/17/17 12:41:03 PM
$filename
R_2017_01_13_12_11_56_user_S5-00580-24-Medexome
使用$filename
运行一系列进程后,我需要使用新的变量重置该变量。
file1 (重新运行某些进程后)
R_2017_01_13_12_11_56_user_S5-00580-24-Medexome
R_2017_01_13_14_46_04_user_S5-00580-25-Medexome
file2 (重新运行某些过程后)
The oldest folder is R_2017_01_13_12_11_56_user_S5-00580-24-Medexome, created on 2017-01-17+11:31:02.5035483130 and analysis done using v1.4 by cmccabe at 01/17/17 12:41:03 PM
The oldest folder is R_2017_01_13_14_46_04_user_S5-00580-25-Medexome, created on 2017-01-17+06:53:07.3194950000 and analysis done using v1.4 by cmccabe at 01/18/17 06:59:08 AM
$filename
的所需输出现在是(因为这是值是新的)
R_2017_01_13_14_46_04_user_S5-00580-25-Medexome
AWK
filename=$(awk 'NR==1{print $1}' file1 file2)
答案 0 :(得分:2)
您想要检查file2的最后一行是否包含file1中给出的字符串。
为此,您只需阅读最后一行,然后查看它是否与file1中的任何单词匹配。
$ awk 'ENDFILE {line=$0} FNR<NR && line ~ $1' file2 file1
R_2017_01_13_14_46_04_user_S5-00580-25-Medexome
这使用:
ENDFILE {line=$0}
在阅读文件后,$0
包含已读取的最后一行(嗯,not always,但我认为您有awk
的现代版本,因为ENDFILE
是GNU awk扩展)。有了这个,我们将最后一行存储到line
,以便我们在阅读下一个文件时可以使用它。
FNR<NR && line ~ $1
在读取file1时,检查存储行中是否存在给定的单词。如果是,则会自动触发print
这使用FNR<NR
技巧,其中FNR
保存当前文件中的行号,而NR
一般为行数。这样,FNR==NR
仅在阅读第一个文件时才为真,而FNR<NR
从第二个文件开始。
答案 1 :(得分:1)
如果您只需要连续查看file2
的最后一行,您可以:
$ awk 'NR==FNR{a[$1];next}{for(i in a)if(i ~ $0) print i}' file1 <(tail -f file2)
说明:
NR==FNR{a[$1];next}
从a
file1
数组中的搜索字词
file2
使用流程替换tail -f
进入awk,即。它从file2
的末尾读取记录,通过a
中的所有搜索词然后从记录中查找它们,如果匹配则打印搜索词