GVKun编程网logo

bash – 在两个文件中计算相等的行数

8

本篇文章给大家谈谈bash–在两个文件中计算相等的行数,同时本文还将给你拓展AWK/BASH:如何匹配一个文件中的字段与另一个文件中的字段?、bash–从另一个文件中的一个文件中删除行、bash–使用

本篇文章给大家谈谈bash – 在两个文件中计算相等的行数,同时本文还将给你拓展AWK / BASH:如何匹配一个文件中的字段与另一个文件中的字段?、bash – 从另一个文件中的一个文件中删除行、bash – 使用awk如何合并2个文件,比如A&B并执行左外连接功能并包含两个文件中的所有列、bash – 使用命令行工具计算文件中的行长度等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

bash – 在两个文件中计算相等的行数

bash – 在两个文件中计算相等的行数

说,我有两个文件,想知道他们有多少相等的行.例如,file1是
1
3
2
4
5
0
10

和file2包含

3
10
5
64
15

在这种情况下,答案应该是3(公共线是’3′,’10’和’5′).

当然,这可以通过python完成,例如,但我很好奇从bash(使用一些标准工具或awk或其他任何东西)这样做.这就是我提出的:

cat file1 file2 | sort | uniq -c | awk '{if ($1 > 1) {$1=""; print $0}}' | wc -l

这对任务来说似乎太复杂了,所以我想知道是否有更简单或更优雅的方法来实现相同的结果.

附:将公共部分的百分比输出到每个文件中的行数也很不错,但这不是必需的.

UPD:文件没有重复的行

要使用awk查找与2个文件共同的行:
awk 'a[$0]++' file1 file2

将输出3 10 15

现在,只需将其传递给wc以获取公共线的数量:

awk 'a[$0]++' file1 file2 | wc -l

将输出3.

说明:

这里的工作类似于默认值为0的字典.当你写一个[$0]时,你会在[$0]中加1,但是这个指令返回一个[$0]的前一个值(见difference between a++ and ++a).所以你第一次遇到某个字符串时会有0(= false),下次会遇到1(或更多,仍然=真).

默认情况下,awk’condition’文件是输出条件为true的所有行的语法.

还要注意每次遇到新密钥时a []数组都会扩展.在脚本结束时,数组的大小将是您在所有输入文件中拥有的唯一值的数量(在OP的示例中,它将是9).

注意:此解决方案计算重复项,即如果您有:

file1 | file2
1     | 3
2     | 3
3     | 3

awk’一个[$0]’file1 file2将输出3 3 3并且awk’一个[$0]’file1 file2 | wc -l将输出3

AWK / BASH:如何匹配一个文件中的字段与另一个文件中的字段?

AWK / BASH:如何匹配一个文件中的字段与另一个文件中的字段?

我有2个文件,第一个包含以下内容:

...
John Allen Smith II 16 555-555-5555 10/24/2010
John Allen Smith II 3 555-555-5555 10/24/2010
John Allen Smith II 17 555-555-5555 10/24/2010
John Doe 16 555-555-5555 10/24/2010
Jane Smith 16 555-555-5555 9/16/2010
Jane Smith 00 555-555-5555 10/24/2010
...

第二个文件是一个名字列表所以……

...
John Allen Smith II
John Doe
Jane Smith
...

是否可以使用awk(或其他bash命令)打印第一个文件中与第二个文件中的任何名称匹配的行(名称可以在第一个文件中重复)

奖金?有没有一种简单的方法可以删除第一个文件中的重复/重复行?

非常感谢,

托梅克

解决方法

AWK

#! /bin/bash
awk 'FNR==NR{!a[$0]++;next }{ b[$0]++ }
END{
  for(i in a){
    for(k in b){
      if (a[i]==1 && i ~ k ) { print i }
    }
  }
}' file1 file2

bash – 从另一个文件中的一个文件中删除行

bash – 从另一个文件中的一个文件中删除行

我有一个文件f1:
line1
line2
line3
line4
..
..

我想删除在另一个文件f2中的所有行:

line2
line8
..
..

我尝试了一些猫和sed,这是不是接近我的意图。我如何做到这一点?

grep -v -x -f f2 f1应该做的伎俩。

说明:

> -v选择不匹配的行
> -x仅匹配整行
> -f f2从f2获取模式

可以改为使用-f f2来匹配f2的固定字符串,而不是模式(如果你想删除“你看到的是什么,你得到什么”的方式,而不是将f2的行作为正则表达式模式)。

bash – 使用awk如何合并2个文件,比如A&B并执行左外连接功能并包含两个文件中的所有列

bash – 使用awk如何合并2个文件,比如A&B并执行左外连接功能并包含两个文件中的所有列

我有多个具有不同列数的文件,我需要在第一个文件和第二个文件上进行合并,并在与第一个文件相对应的awk中执行左外连接,并打印与两个文件的第一列匹配的两个文件中的所有列.

我尝试过以下代码来接近我的输出.但我无法打印“,”,在第二个文件中找不到匹配的数字.下面是代码.加入需要排序并花费比awk更多的时间.我的文件大小很大,如3000万条记录.

awk -F ',' '{  
    if (NR==FNR){ r[$1]=$0}
    else{ if($1 in r) 
    r[$1]=r[$1]gensub($1,"",1)}
}END{for(i in r){print r[i]}}' file1 file2

file1

number,column1,column2,..columnN

File2

numbr,..columnN

Output

number,file1.column1,file1.column2,..file1.columnN,file2.column1,file2.column3...,file2.columnN

file1

1,a,b,c
2,c
3,c
5,c

file2

1,x,y
2,y
5,y
6,y
7,y

desired output

1,c,y
3,5,y

解决方法

$cat tst.awk
BEGIN { FS=OFS="," }
NR==FNR {
    tail = gensub(/[^,]*,/,1)
    if ( FNR == 1 ) {
        empty = gensub(/[^,]/,"g",tail)
    }
    file2[$1] = tail
    next
}
{ print $0,($1 in file2 ? file2[$1] : empty) }

$awk -f tst.awk file2 file1
1,y

上面使用GNU awk for gensub(),与其他awks一起,它只是在最初分配后在适当的变量上执行[g] sub()的又一步.

您可能想要测试性能差异的一个有趣的(至少对我来说)替代方案是:

$cat tst.awk
BEGIN { FS=OFS=",1)
    idx[$1] = NR
    file2[NR] = tail
    if ( FNR == 1 ) {
        file2[""] = gensub(/[^,tail)
    }
    next
}
{ print $0,file2[idx[$1]] }

$awk -f tst.awk file2 file1
1,y

但我真的不希望它更快,甚至可能更慢.

bash – 使用命令行工具计算文件中的行长度

bash – 使用命令行工具计算文件中的行长度

问题

如果我有一个长文件包含许多不同长度的行,我如何计算每行长度的出现次数?

例:

file.txt

this
is
a
sample
file
with
several
lines
of
varying
length

运行count_line_lengths file.txt将给出:

Length Occurences
1      1
2      2
4      3
5      1
6      2
7      2

想法?

count.awk:
{
  print length($0);
}

… …

$ awk -f count.awk input.txt | sort | uniq -c
      1 1
      2 2
      3 4
      1 5
      2 6
      2 7

关于bash – 在两个文件中计算相等的行数的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于AWK / BASH:如何匹配一个文件中的字段与另一个文件中的字段?、bash – 从另一个文件中的一个文件中删除行、bash – 使用awk如何合并2个文件,比如A&B并执行左外连接功能并包含两个文件中的所有列、bash – 使用命令行工具计算文件中的行长度等相关内容,可以在本站寻找。

本文标签: