Awk 匹配日志文件中的两个模式并输出为表

Awk 匹配日志文件中的两个模式并输出为表,awk,Awk,我需要在一个日志文件中匹配两个模式,如果可能的话,需要将输出作为一个表。日志文件中有几行我想匹配的单词,下面是日志文件的一个示例: Seed for random set to: uuzTjCqMVRk= --out /home/ALL/ADRL.GLND.FET-EnhA --max-shift False --min-shift False p-value = 0.542 Seed for random set to: P2+shGCxj70= --out

我需要在一个日志文件中匹配两个模式,如果可能的话,需要将输出作为一个表。日志文件中有几行我想匹配的单词,下面是日志文件的一个示例:

Seed for random set to: uuzTjCqMVRk=
    --out /home/ALL/ADRL.GLND.FET-EnhA
    --max-shift False
    --min-shift False

p-value = 0.542

Seed for random set to: P2+shGCxj70=
    --out /home/ALL/BLD.CD14.MONO-EnhA
    --max-shift False
    --min-shift False

p-value = 0.737
我希望获得如下输出(制表符分隔以导出为文本文件):

如果可能的话,我想在bash中做

编辑:

这就是我尝试过的:

grep 'out' file.log | awk '{print $0}' > file1.txt
grep 'p-value' file.log | awk '{print $0}' > file2.txt
paste -d"\t" file1.txt file2.txt > pval.txt
零错误检查:

awk '/--out/ { sub(".*/","",$2);printf "%s\t",$2; } /p-value = / { print $3; }' < file.log
awk'/--out/{sub(.*/”,“”,$2);printf“%s\t”,$2;}/p-value=/{print$3;}'
如果一行有
--out
,则打印路径的基本名称,后跟一个选项卡。如果一行有
p-value=
,则打印数字和换行符

在这种情况下,
awk
很好,因为您可以修改匹配的行。考虑到
grep
,您必须部署额外的工具(如
sed
)来获取所需的部件,然后将它们重新组装成有用的形式。您对
grep
paste
的使用是非常有效的,通过调整可以起到作用,但要付出更多的过程和部署的工具的代价

您可以在一个更大的awk模式匹配块中实现这一点,这将更加防弹。我将留给读者作为练习。

零错误检查:

awk '/--out/ { sub(".*/","",$2);printf "%s\t",$2; } /p-value = / { print $3; }' < file.log
$ awk -F'[/ ]' -v OFS='\t' 'BEGIN{print "Group","Pvalue"} (NR%7)==2{g=$NF} (NR%7)==6{print g, $NF}' file
Group   Pvalue
ADRL.GLND.FET-EnhA      0.542
BLD.CD14.MONO-EnhA      0.737
awk'/--out/{sub(.*/”,“”,$2);printf“%s\t”,$2;}/p-value=/{print$3;}'
如果一行有
--out
,则打印路径的基本名称,后跟一个选项卡。如果一行有
p-value=
,则打印数字和换行符

在这种情况下,
awk
很好,因为您可以修改匹配的行。考虑到
grep
,您必须部署额外的工具(如
sed
)来获取所需的部件,然后将它们重新组装成有用的形式。您对
grep
paste
的使用是非常有效的,通过调整可以起到作用,但要付出更多的过程和部署的工具的代价

您可以在一个更大的awk模式匹配块中实现这一点,这将更加防弹。我将留给读者作为练习

$ awk -F'[/ ]' -v OFS='\t' 'BEGIN{print "Group","Pvalue"} (NR%7)==2{g=$NF} (NR%7)==6{print g, $NF}' file
Group   Pvalue
ADRL.GLND.FET-EnhA      0.542
BLD.CD14.MONO-EnhA      0.737
或者,如果您愿意:

$ awk -F'[/ ]+' -v OFS='\t' 'BEGIN{print "Group","Pvalue"} $2=="--out"{g=$NF} $1=="p-value"{print g, $NF}' file
Group   Pvalue
ADRL.GLND.FET-EnhA      0.542
BLD.CD14.MONO-EnhA      0.737
或者,如果您愿意:

$ awk -F'[/ ]+' -v OFS='\t' 'BEGIN{print "Group","Pvalue"} $2=="--out"{g=$NF} $1=="p-value"{print g, $NF}' file
Group   Pvalue
ADRL.GLND.FET-EnhA      0.542
BLD.CD14.MONO-EnhA      0.737

你能粘贴你试过的吗?你能粘贴你试过的吗?