Error[8]: Undefined offset: 11, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我有三个文件,如下所示 FILE1.TXT "aba" 0 0 "aba" 0 0 1"abc" 0 1"abd" 1 1 "xxx" 0 0 FILE2.TXT "xyz" 0 0"aba" 0 0 0 0"aba" 0 0 0 1"xxx" 0 0"abc" 1 1 file3.txt "xyx" 0 0"aba" 0 0 "aba" 0 1 0"xxx" 0 0 0 1 我有三个文件,如下所示

file1.TXT

"aba" 0 0 "aba" 0 0 1"abc" 0 1"abd" 1 1 "xxx" 0 0

file2.TXT

"xyz" 0 0"aba" 0 0 0 0"aba" 0 0 0 1"xxx" 0 0"abc" 1 1

file3.txt

"xyx" 0 0"aba" 0 0 "aba" 0 1 0"xxx" 0 0 0 1"abc" 1 1

我想基于前两列找到所有三个文件中的类似元素.为了找到两个文件中的类似元素,我使用了类似的东西

awk 'FNR==NR{a[,]++;next}a[,]' file1.txt file2.txt

但是,当输入文件超过2时,我们怎样才能在所有文件中找到类似的元素?
有人可以帮忙吗?

使用当前的awk解决方案,输出会忽略重复的键列并将输出作为

"xxx" 0 0

如果我们假设输出来自file1.txt,则预期输出为:

"aba" 0 0 "aba" 0 0 1"xxx" 0 0

即它应该获得具有重复键列的行.

解决方法 尝试以下针对N个文件推广的解决方案.它将第一个文件的数据保存在值为1的散列中,并且对于来自下一个文件的每个命中,该值将递增.最后,我比较每个键的值是否与处理的文件数相同,并仅打印匹配的文件.
awk '    FNR == NR { arr[,] = 1; next }    { if ( arr[,] ) { arr[,]++ } }    END {         for ( key in arr ) {            if ( arr[key] != ARGC - 1 ) { continue }            split( key,key_arr,SUBSEP )            printf "%s %s\n",key_arr[1],key_arr[2]         }     }' file{1..3}

它产生:

"xxx" 0"aba" 0

编辑添加打印整行的版本(请参阅注释).我添加了另一个带有相同键的数组,我保存了该行,并在printf函数中使用它.我留下旧代码评论.

awk '    ##FNR == NR { arr[,] = 1; next }    FNR == NR { arr[,] = 1; line[,] = 
awk '    FNR == NR {         arr[,] = 1        line[,] = line[,] ( line[,] ? SUBSEP : "" ) 
"xxx" 0 0"aba" 0 0 "aba" 0 0 1
next } FNR == 1 { delete found } { if ( arr[,] && ! found[,]++; found[,] = 1 } } END { num_files = ARGC -1 for ( key in arr ) { if ( arr[key] < num_files ) { continue } split( line[ key ],line_arr,SUBSEP ) for ( i = 1; i <= length( line_arr ); i++ ) { printf "%s\n",line_arr[ i ] } } }' file{1..3}
; next } { if ( arr[,]++ } } END { for ( key in arr ) { if ( arr[key] != ARGC - 1 ) { continue } ##split( key,SUBSEP ) ##printf "%s %s\n",key_arr[2] printf "%s\n",line[ key ] } }' file{1..3}

NEW EDIT(请参阅注释)添加处理具有相同键的多行的版本.基本上我加入所有条目而不只保存一个,更改行[$1,$2] = $0行[$1,$2] =行[$1,$2](行[$1,$2]?SUBSEP:“”)$0.在打印时,我使用分隔符(SUBSEP变量)进行反向分割并打印每个条目.

[+++]

对于有问题的新数据,它会产生:

[+++] 总结

以上是内存溢出为你收集整理的awk – 在> 2个文件中查找常用元素全部内容,希望文章能够帮你解决awk – 在> 2个文件中查找常用元素所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 12, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我有三个文件,如下所示 FILE1.TXT "aba" 0 0 "aba" 0 0 1"abc" 0 1"abd" 1 1 "xxx" 0 0 FILE2.TXT "xyz" 0 0"aba" 0 0 0 0"aba" 0 0 0 1"xxx" 0 0"abc" 1 1 file3.txt "xyx" 0 0"aba" 0 0 "aba" 0 1 0"xxx" 0 0 0 1 我有三个文件,如下所示

file1.TXT

"aba" 0 0 "aba" 0 0 1"abc" 0 1"abd" 1 1 "xxx" 0 0

file2.TXT

"xyz" 0 0"aba" 0 0 0 0"aba" 0 0 0 1"xxx" 0 0"abc" 1 1

file3.txt

"xyx" 0 0"aba" 0 0 "aba" 0 1 0"xxx" 0 0 0 1"abc" 1 1

我想基于前两列找到所有三个文件中的类似元素.为了找到两个文件中的类似元素,我使用了类似的东西

awk 'FNR==NR{a[,]++;next}a[,]' file1.txt file2.txt

但是,当输入文件超过2时,我们怎样才能在所有文件中找到类似的元素?
有人可以帮忙吗?

使用当前的awk解决方案,输出会忽略重复的键列并将输出作为

"xxx" 0 0

如果我们假设输出来自file1.txt,则预期输出为:

"aba" 0 0 "aba" 0 0 1"xxx" 0 0

即它应该获得具有重复键列的行.

解决方法 尝试以下针对N个文件推广的解决方案.它将第一个文件的数据保存在值为1的散列中,并且对于来自下一个文件的每个命中,该值将递增.最后,我比较每个键的值是否与处理的文件数相同,并仅打印匹配的文件.
awk '    FNR == NR { arr[,] = 1; next }    { if ( arr[,] ) { arr[,]++ } }    END {         for ( key in arr ) {            if ( arr[key] != ARGC - 1 ) { continue }            split( key,key_arr,SUBSEP )            printf "%s %s\n",key_arr[1],key_arr[2]         }     }' file{1..3}

它产生:

"xxx" 0"aba" 0

编辑添加打印整行的版本(请参阅注释).我添加了另一个带有相同键的数组,我保存了该行,并在printf函数中使用它.我留下旧代码评论.

awk '    ##FNR == NR { arr[,] = 1; next }    FNR == NR { arr[,] = 1; line[,] = 
awk '    FNR == NR {         arr[,] = 1        line[,] = line[,] ( line[,] ? SUBSEP : "" ) 
"xxx" 0 0"aba" 0 0 "aba" 0 0 1
next } FNR == 1 { delete found } { if ( arr[,] && ! found[,]++; found[,] = 1 } } END { num_files = ARGC -1 for ( key in arr ) { if ( arr[key] < num_files ) { continue } split( line[ key ],line_arr,SUBSEP ) for ( i = 1; i <= length( line_arr ); i++ ) { printf "%s\n",line_arr[ i ] } } }' file{1..3}
; next } { if ( arr[,]++ } } END { for ( key in arr ) { if ( arr[key] != ARGC - 1 ) { continue } ##split( key,SUBSEP ) ##printf "%s %s\n",key_arr[2] printf "%s\n",line[ key ] } }' file{1..3}

NEW EDIT(请参阅注释)添加处理具有相同键的多行的版本.基本上我加入所有条目而不只保存一个,更改行[$1,$2] = $0行[$1,$2] =行[$1,$2](行[$1,$2]?SUBSEP:“”)$0.在打印时,我使用分隔符(SUBSEP变量)进行反向分割并打印每个条目.

对于有问题的新数据,它会产生:

[+++] 总结

以上是内存溢出为你收集整理的awk – 在> 2个文件中查找常用元素全部内容,希望文章能够帮你解决awk – 在> 2个文件中查找常用元素所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
awk – 在&gt; 2个文件中查找常用元素_系统运维_内存溢出

awk – 在&gt; 2个文件中查找常用元素

awk – 在&gt; 2个文件中查找常用元素,第1张

概述我有三个文件,如下所示 FILE1.TXT "aba" 0 0 "aba" 0 0 1"abc" 0 1"abd" 1 1 "xxx" 0 0 FILE2.TXT "xyz" 0 0"aba" 0 0 0 0"aba" 0 0 0 1"xxx" 0 0"abc" 1 1 file3.txt "xyx" 0 0"aba" 0 0 "aba" 0 1 0"xxx" 0 0 0 1 我有三个文件,如下所示

file1.TXT

"aba" 0 0 "aba" 0 0 1"abc" 0 1"abd" 1 1 "xxx" 0 0

file2.TXT

"xyz" 0 0"aba" 0 0 0 0"aba" 0 0 0 1"xxx" 0 0"abc" 1 1

file3.txt

"xyx" 0 0"aba" 0 0 "aba" 0 1 0"xxx" 0 0 0 1"abc" 1 1

我想基于前两列找到所有三个文件中的类似元素.为了找到两个文件中的类似元素,我使用了类似的东西

awk 'FNR==NR{a[,]++;next}a[,]' file1.txt file2.txt

但是,当输入文件超过2时,我们怎样才能在所有文件中找到类似的元素?
有人可以帮忙吗?

使用当前的awk解决方案,输出会忽略重复的键列并将输出作为

"xxx" 0 0

如果我们假设输出来自file1.txt,则预期输出为:

"aba" 0 0 "aba" 0 0 1"xxx" 0 0

即它应该获得具有重复键列的行.

解决方法 尝试以下针对N个文件推广的解决方案.它将第一个文件的数据保存在值为1的散列中,并且对于来自下一个文件的每个命中,该值将递增.最后,我比较每个键的值是否与处理的文件数相同,并仅打印匹配的文件.
awk '    FNR == NR { arr[,] = 1; next }    { if ( arr[,] ) { arr[,]++ } }    END {         for ( key in arr ) {            if ( arr[key] != ARGC - 1 ) { continue }            split( key,key_arr,SUBSEP )            printf "%s %s\n",key_arr[1],key_arr[2]         }     }' file{1..3}

它产生:

"xxx" 0"aba" 0

编辑添加打印整行的版本(请参阅注释).我添加了另一个带有相同键的数组,我保存了该行,并在printf函数中使用它.我留下旧代码评论.

awk '    ##FNR == NR { arr[,] = 1; next }    FNR == NR { arr[,] = 1; line[,] = 
awk '    FNR == NR {         arr[,] = 1        line[,] = line[,] ( line[,] ? SUBSEP : "" ) 
"xxx" 0 0"aba" 0 0 "aba" 0 0 1
next } FNR == 1 { delete found } { if ( arr[,] && ! found[,]++; found[,] = 1 } } END { num_files = ARGC -1 for ( key in arr ) { if ( arr[key] < num_files ) { continue } split( line[ key ],line_arr,SUBSEP ) for ( i = 1; i <= length( line_arr ); i++ ) { printf "%s\n",line_arr[ i ] } } }' file{1..3}
; next } { if ( arr[,]++ } } END { for ( key in arr ) { if ( arr[key] != ARGC - 1 ) { continue } ##split( key,SUBSEP ) ##printf "%s %s\n",key_arr[2] printf "%s\n",line[ key ] } }' file{1..3}

NEW EDIT(请参阅注释)添加处理具有相同键的多行的版本.基本上我加入所有条目而不只保存一个,更改行[$1,$2] = $0行[$1,$2] =行[$1,$2](行[$1,$2]?SUBSEP:“”)$0.在打印时,我使用分隔符(SUBSEP变量)进行反向分割并打印每个条目.

对于有问题的新数据,它会产生:

总结

以上是内存溢出为你收集整理的awk – 在> 2个文件中查找常用元素全部内容,希望文章能够帮你解决awk – 在> 2个文件中查找常用元素所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047584.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存