Regex 通过模式匹配从上一行和下一行提取列
我有以下文件:extract_info.txtRegex 通过模式匹配从上一行和下一行提取列,regex,awk,Regex,Awk,我有以下文件:extract_info.txt ABC PNG CHNS 到_extractfrom.txt,我需要从中检索信息: ABC 123 234 TCHSL NBV 234 23764 DHG CHNS 123 347 CGJKS CVS 233 4747 JSHGD PNG 122 324 HGH SJDH 373 3487 JHG 我正在运行以下代码 while read line do gene=$(echo $line | awk -F'
ABC
PNG
CHNS
到_extractfrom.txt,我需要从中检索信息:
ABC 123 234 TCHSL
NBV 234 23764 DHG
CHNS 123 347 CGJKS
CVS 233 4747 JSHGD
PNG 122 324 HGH
SJDH 373 3487 JHG
我正在运行以下代码
while read line
do
gene=$(echo $line | awk -F' ' '{print $1}')
app1=$(awk -v comp1="$gene" '(comp1==$1) {print $1 }' to_extractfrom.txt)
done < extract_info.txt
如果输出的顺序必须与extract_info文件的顺序相同,并且使用GNU awk,则可以这样做
gawk '
BEGIN {prev = "-"}
NR == FNR {extract[$1] = FNR; next}
is_match {output[m1] = $1 FS m1 FS m2; is_match = 0}
$1 in extract {is_match = 1; m1 = $1; m2 = prev}
{prev = $1}
END {
PROCINFO["sorted_in"] = "@val_num_asc"
for (key in extract) print output[key]
}
' extract_info.txt to_extractfrom.txt
如果输出的顺序必须与extract_info文件的顺序相同,并且使用GNU awk,则可以这样做
gawk '
BEGIN {prev = "-"}
NR == FNR {extract[$1] = FNR; next}
is_match {output[m1] = $1 FS m1 FS m2; is_match = 0}
$1 in extract {is_match = 1; m1 = $1; m2 = prev}
{prev = $1}
END {
PROCINFO["sorted_in"] = "@val_num_asc"
for (key in extract) print output[key]
}
' extract_info.txt to_extractfrom.txt
如果输出的顺序必须与extract_info文件的顺序相同,并且使用GNU awk,则可以这样做
gawk '
BEGIN {prev = "-"}
NR == FNR {extract[$1] = FNR; next}
is_match {output[m1] = $1 FS m1 FS m2; is_match = 0}
$1 in extract {is_match = 1; m1 = $1; m2 = prev}
{prev = $1}
END {
PROCINFO["sorted_in"] = "@val_num_asc"
for (key in extract) print output[key]
}
' extract_info.txt to_extractfrom.txt
如果输出的顺序必须与extract_info文件的顺序相同,并且使用GNU awk,则可以这样做
gawk '
BEGIN {prev = "-"}
NR == FNR {extract[$1] = FNR; next}
is_match {output[m1] = $1 FS m1 FS m2; is_match = 0}
$1 in extract {is_match = 1; m1 = $1; m2 = prev}
{prev = $1}
END {
PROCINFO["sorted_in"] = "@val_num_asc"
for (key in extract) print output[key]
}
' extract_info.txt to_extractfrom.txt
你能破解这个密码吗?因为我有另一个文件,我需要在模式匹配之前和之后从第4列提取信息,我可以重复使用相同的代码。哈哈,对不起,Jackman先生,我的意思是你可以提供一步一步的解释,以便我可以重复使用此代码吗?FNR=NR将比较两个文件中的行,我们将需要的列存储在一个数组中,它是一个名为extract的数组,我们存储第1列中的所有值,是一个标志吗?进一步进入下一个条件。你能破解这个密码吗?因为我有另一个文件,我需要在模式匹配之前和之后从第4列提取信息,我可以重复使用相同的代码。哈哈,对不起,Jackman先生,我的意思是你可以提供一步一步的解释,以便我可以重复使用此代码吗?FNR=NR将比较两个文件中的行,我们将需要的列存储在一个数组中,它是一个名为extract的数组,我们存储第1列中的所有值,是一个标志吗?进一步进入下一个条件。你能破解这个密码吗?因为我有另一个文件,我需要在模式匹配之前和之后从第4列提取信息,我可以重复使用相同的代码。哈哈,对不起,Jackman先生,我的意思是你可以提供一步一步的解释,以便我可以重复使用此代码吗?FNR=NR将比较两个文件中的行,我们将需要的列存储在一个数组中,它是一个名为extract的数组,我们存储第1列中的所有值,是一个标志吗?进一步进入下一个条件。你能破解这个密码吗?因为我有另一个文件,我需要在模式匹配之前和之后从第4列提取信息,我可以重复使用相同的代码。哈哈,对不起,Jackman先生,我的意思是你可以提供一步一步的解释,以便我可以重复使用此代码吗?FNR=NR将比较两个文件中的行,我们将需要的列存储在一个数组中,它是一个名为extract的数组,我们存储第1列中的所有值,是一个标志吗?进一步进入下一个状态。
NBV ABC -
SJDH PNG CVS
CVS CHNS NBV