Regex 使用awk搜索匹配项并重命名
我正在绞尽脑汁想办法解决这个问题,希望有人能帮上忙。我有两个文件。。。文件1包含一长串为某些样本序列编码的唯一字符串(单列)。File2包含许多记录和许多列,但这里的记录组织具有匹配样本序列的唯一字符串。我希望AWK在File2中搜索File1中的每个唯一字符串,并使用在File2的$1中找到的字符串重命名File1中的唯一字符串,该字符串对应于找到唯一字符串的记录 File1Regex 使用awk搜索匹配项并重命名,regex,string,bash,awk,match,Regex,String,Bash,Awk,Match,我正在绞尽脑汁想办法解决这个问题,希望有人能帮上忙。我有两个文件。。。文件1包含一长串为某些样本序列编码的唯一字符串(单列)。File2包含许多记录和许多列,但这里的记录组织具有匹配样本序列的唯一字符串。我希望AWK在File2中搜索File1中的每个唯一字符串,并使用在File2的$1中找到的字符串重命名File1中的唯一字符串,该字符串对应于找到唯一字符串的记录 File1 id1 id2 id3 id4 id5 id6 id7 id8 id9 id10 文件2 id1,id9,id33,
id1
id2
id3
id4
id5
id6
id7
id8
id9
id10
文件2
id1,id9,id33,id35,id36,id37,id76
id5,id7,id8,id20,id22,id23
id6,id11,id13,id14
所需输出
id1
id2
id3
id4
id5
id6
id5
id5
id1
id10
我的实际File1在$1中有大约17000条记录,File2有大约4000条记录,有1-400个字段。感谢您的帮助 我不知道。塞德
sed 's/^\([^,]*\),\(.*\)/s;\\(\2\\);\1;/' File2 | sed 's/,/\\|/g' > temp.sed
sed -f temp.sed File1 > Desired
哦,我不知道。塞德
sed 's/^\([^,]*\),\(.*\)/s;\\(\2\\);\1;/' File2 | sed 's/,/\\|/g' > temp.sed
sed -f temp.sed File1 > Desired
哦,我不知道。塞德
sed 's/^\([^,]*\),\(.*\)/s;\\(\2\\);\1;/' File2 | sed 's/,/\\|/g' > temp.sed
sed -f temp.sed File1 > Desired
哦,我不知道。塞德
sed 's/^\([^,]*\),\(.*\)/s;\\(\2\\);\1;/' File2 | sed 's/,/\\|/g' > temp.sed
sed -f temp.sed File1 > Desired
试试这个:
awk '
NR==FNR {
lines[$0]++;
next
}
{
for(line in lines) {
num = split(line, flds, /,/);
for(i=1; i<=num; i++) {
if(flds[i] == $1) {
print flds[1]; next
}
}
}
print $1; next
}' file2 file1
id1
id2
id3
id4
id5
id6
id5
id5
id1
id10
awk'
NR==FNR{
行[$0]++;
下一个
}
{
用于(一行接一行){
num=拆分(行、FLD、/、/);
对于(i=1;i试试这个:
awk '
NR==FNR {
lines[$0]++;
next
}
{
for(line in lines) {
num = split(line, flds, /,/);
for(i=1; i<=num; i++) {
if(flds[i] == $1) {
print flds[1]; next
}
}
}
print $1; next
}' file2 file1
id1
id2
id3
id4
id5
id6
id5
id5
id1
id10
awk'
NR==FNR{
行[$0]++;
下一个
}
{
用于(一行接一行){
num=拆分(行、FLD、/、/);
对于(i=1;i试试这个:
awk '
NR==FNR {
lines[$0]++;
next
}
{
for(line in lines) {
num = split(line, flds, /,/);
for(i=1; i<=num; i++) {
if(flds[i] == $1) {
print flds[1]; next
}
}
}
print $1; next
}' file2 file1
id1
id2
id3
id4
id5
id6
id5
id5
id1
id10
awk'
NR==FNR{
行[$0]++;
下一个
}
{
用于(一行接一行){
num=拆分(行、FLD、/、/);
对于(i=1;i试试这个:
awk '
NR==FNR {
lines[$0]++;
next
}
{
for(line in lines) {
num = split(line, flds, /,/);
for(i=1; i<=num; i++) {
if(flds[i] == $1) {
print flds[1]; next
}
}
}
print $1; next
}' file2 file1
id1
id2
id3
id4
id5
id6
id5
id5
id1
id10
awk'
NR==FNR{
行[$0]++;
下一个
}
{
用于(一行接一行){
num=拆分(行、FLD、/、/);
对于(i=1;i这里有一种不同的awk方法。将以下内容放入可执行的awk文件中:
#!/usr/bin/awk -f
FNR==NR {f1[$0]=NR; out[NR]=$0; cnt=NR; next}
{
split($0, f2_line, ",")
for( fld in f2_line ) {
f1_line_num=f1[f2_line[fld]]
if( f1_line_num!="" ) out[f1_line_num]=f2_line[1]
}
}
END { for( j=1;j<=cnt;j++ ) print out[j] }
!/usr/bin/awk-f
FNR==NR{f1[$0]=NR;out[NR]=$0;cnt=NR;next}
{
拆分($0,f2_行,“,”)
用于(f2_线中的fld){
f1_线_数=f1[f2_线[fld]]
如果(f1_行数!=“out[f1_行数]=f2_行[1]
}
}
END{for(j=1;j这里有一种不同的awk方法。将以下内容放入可执行的awk文件中:
#!/usr/bin/awk -f
FNR==NR {f1[$0]=NR; out[NR]=$0; cnt=NR; next}
{
split($0, f2_line, ",")
for( fld in f2_line ) {
f1_line_num=f1[f2_line[fld]]
if( f1_line_num!="" ) out[f1_line_num]=f2_line[1]
}
}
END { for( j=1;j<=cnt;j++ ) print out[j] }
!/usr/bin/awk-f
FNR==NR{f1[$0]=NR;out[NR]=$0;cnt=NR;next}
{
拆分($0,f2_行,“,”)
用于(f2_线中的fld){
f1_线_数=f1[f2_线[fld]]
如果(f1_行数!=“out[f1_行数]=f2_行[1]
}
}
END{for(j=1;j这里有一种不同的awk方法。将以下内容放入可执行的awk文件中:
#!/usr/bin/awk -f
FNR==NR {f1[$0]=NR; out[NR]=$0; cnt=NR; next}
{
split($0, f2_line, ",")
for( fld in f2_line ) {
f1_line_num=f1[f2_line[fld]]
if( f1_line_num!="" ) out[f1_line_num]=f2_line[1]
}
}
END { for( j=1;j<=cnt;j++ ) print out[j] }
!/usr/bin/awk-f
FNR==NR{f1[$0]=NR;out[NR]=$0;cnt=NR;next}
{
拆分($0,f2_行,“,”)
用于(f2_线中的fld){
f1_线_数=f1[f2_线[fld]]
如果(f1_行数!=“out[f1_行数]=f2_行[1]
}
}
END{for(j=1;j这里有一种不同的awk方法。将以下内容放入可执行的awk文件中:
#!/usr/bin/awk -f
FNR==NR {f1[$0]=NR; out[NR]=$0; cnt=NR; next}
{
split($0, f2_line, ",")
for( fld in f2_line ) {
f1_line_num=f1[f2_line[fld]]
if( f1_line_num!="" ) out[f1_line_num]=f2_line[1]
}
}
END { for( j=1;j<=cnt;j++ ) print out[j] }
!/usr/bin/awk-f
FNR==NR{f1[$0]=NR;out[NR]=$0;cnt=NR;next}
{
拆分($0,f2_行,“,”)
用于(f2_线中的fld){
f1_线_数=f1[f2_线[fld]]
如果(f1_行数!=“out[f1_行数]=f2_行[1]
}
}
结束{for(j=1;j此代码对于我发布的示例非常有效,但当我使用实际的大文件运行时,它会不间断地打印输出。它可能打印了所有迭代,而不仅仅是文件1中替换的输出。不确定发生了什么,我不得不中断运行。请注意文件传递的顺序。将文件2放在文件1之前。此代码有效eat用于我发布的示例,但当我使用实际的大文件运行它时,它会不间断地打印输出。它可能打印了所有迭代,而不仅仅是文件1中替换的输出。不确定发生了什么,我不得不中断运行。请注意文件传递的顺序。将文件2放在文件1之前。这段代码对于我发布的示例非常有效ed,但当我使用实际的大文件运行它时,它会不间断地打印输出。它可能打印了所有迭代,而不仅仅是file1中替换的输出。不确定发生了什么,我不得不中断运行。请注意文件传递的顺序。将file2放在file1之前。这段代码对于我发布的示例非常有效,但当我使用它打印的实际大文件是不间断的输出。它可能打印了所有迭代,而不仅仅是文件1中替换的输出。不确定发生了什么,我不得不中断运行。注意文件传递的顺序。将文件2放在文件1之前。这非常有效!感谢分解。从文件2生成一个数组用于递归搜索真是天才!很高兴它能为您工作,不过我想指出的是没有发生递归。file2
正在按顺序检查,逐行和每行中的字段都与由file1
生成的关联数组进行比较。相比之下,@JS웃 s的答案是将file2
放入一个数组,并逐行检查file1
,这意味着答案不需要像我这样的out
数组来保留file1
的输出顺序
来自file2
的行,但使用不同的源来执行此操作。这非常有效!感谢分解。从file2生成一个用于递归搜索的数组是天才!很高兴它对您有效,尽管我想指出,没有发生递归。file2
正在按顺序检查,逐行检查,并在每个字段中检查字段行与由file1
生成的关联数组进行比较웃 s的答案是将file2
放入一个数组,并逐行检查file1
,这意味着答案不需要像我这样的out
数组来保留file1
的输出顺序
来自file2
的行,但使用不同的源来执行此操作。这非常有效!感谢分解。从file2生成一个用于递归搜索的数组是天才!很高兴它对您有效,尽管我想指出,没有发生递归。file2
正在按顺序检查,逐行检查,并在每个字段中检查字段行与由file1
生成的关联数组进行比较웃 s的答案是将file2
放入一个数组,并逐行检查file1
,这意味着答案不需要像我这样的out
数组