标签: comm

如何获得comm输出的第一列?

所以我试图使用的第一列通信输出awk.我读到Tab被用作comm的分隔符,所以我做了:

awk -F"\t" '{print $1}' comm-result.txt
Run Code Online (Sandbox Code Playgroud)

使用comm-result.txt包含输出:

comm -3 file1 file2
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.

这个推荐还将空格字符作为分隔符,当我的文件包含多个空格时,我得到奇怪的结果.

我怎么才能从第一列获得comm

linux shell command-line comm

27
推荐指数
2
解决办法
7万
查看次数

如何删除两个文件之间的公共行而不进行排序?

我有两个没有分拣的文件有一些共同点.

FILE1.TXT

Z
B
A
H
L
Run Code Online (Sandbox Code Playgroud)

FILE2.TXT

S
L
W
Q
A
Run Code Online (Sandbox Code Playgroud)

我用来删除公共行的方式如下:

sort -u file1.txt > file1_sorted.txt
sort -u file2.txt > file2_sorted.txt

comm -23 file1_sorted.txt file2_sorted.txt > file_final.txt
Run Code Online (Sandbox Code Playgroud)

输出:

B
H
Z
Run Code Online (Sandbox Code Playgroud)

问题是我想保留file1.txt的顺序,我的意思是:

期望的输出:

Z
B
H
Run Code Online (Sandbox Code Playgroud)

我试过的一个解决方案是循环读取file2.txt的所有行:

sed -i '/^${line_file2}$/d' file1.txt
Run Code Online (Sandbox Code Playgroud)

但如果文件很大,性能可能会很糟糕.

  • 你喜欢我的想法吗?
  • 你还有其他选择吗?

sorting bash optimization sed comm

15
推荐指数
2
解决办法
2万
查看次数

如果"file"具有空分隔项,如何使用"grep -f file"?

我需要找到大量文件(空分隔的项目data2,data3存在于...) data1.完全匹配是必需的.

一切都很好用,grep -f data1 data2 data3 ...直到所有项目data1也为空分隔.

  1. 仅使用换行符 - 好的:

    $ cat data1
    1234
    abcd
    efgh
    5678
    $ cat data2
    1111
    oooo
    abcd
    5678
    $ grep -xFf data1 data2
    abcd
    5678
    
    Run Code Online (Sandbox Code Playgroud)
  2. data2-包含null分隔的项目确定-z:使用

    $ printf '1111\0oooo\0abcd\0005678' > data2
    $ grep -zxFf data1 data2 | xargs -0 printf '%s\n'
    abcd
    5678
    
    Run Code Online (Sandbox Code Playgroud)
  3. 现在,这两个data1data2包含空分隔的项目- 失败.似乎该-z选项不适用于指定的文件-f:

    $ printf '1234\0abcd\0efgh\0005678' > …
    Run Code Online (Sandbox Code Playgroud)

bash grep comm

5
推荐指数
1
解决办法
111
查看次数

在Unix中寻找补充集

鉴于这两个文件:

 $ cat A.txt     $ cat B.txt
    3           11
    5           1
    1           12
    2           3
    4           2
Run Code Online (Sandbox Code Playgroud)

我想在B中找到A"BUT NOT"中的行号.什么是unix命令?

我试过这个,但似乎失败了:

comm -3 <(sort -n A.txt) <(sort -n B.txt) | sed 's/\t//g' 
Run Code Online (Sandbox Code Playgroud)

unix linux comm set-operations

4
推荐指数
1
解决办法
2008
查看次数

不排序的两个文件之间的差异

我有文件file1file2其中file2是 的子集file1。这意味着,如果我迭代file1,则有些行在 中file2,有些行不在 中,但没有行file2不在 中file1。一个文件中可能有多行内容相同。现在我想知道它们之间的区别,即所有行file1都不在file2.

根据这个广受好评的答案

diff(1) 不是答案,comm(1) 才是。

(无论出于何种原因)

但据我了解,comm首先需要对文件进行排序。问题:两个文件都是有序的(未排序!),并且需要保留此顺序。所以我真正想要的是迭代file1,并检查每一行,如果它也在file2. 如果没有,请将其写入file3. 如果相同内容出现多次,则应保留多次!

有没有办法用命令行来做到这一点?

bash shell diff comm difference

4
推荐指数
1
解决办法
3519
查看次数

删除文件A中包含文件B中的字符串的所有行

我有2个文本文件,并希望文件A中的删除行包含文件B中的字符串

档案A:

joe     ball     1335
john    dyer     1365
dylan   fisher   1795
ian     gill     1913
eric    kelly    1101
Run Code Online (Sandbox Code Playgroud)

文件B:

1795
1913
Run Code Online (Sandbox Code Playgroud)

我希望Bash代码获得如下结果:

joe     ball     1335
john    dyer     1365
eric    kelly    1101
Run Code Online (Sandbox Code Playgroud)

我尝试这些代码,但答案没有成功

$ grep -vwF -f A B
$ awk -F'[ ,]' 'FNR==NR{a[$1];next} !($4 in a)'
Run Code Online (Sandbox Code Playgroud)

bash awk grep sed comm

3
推荐指数
1
解决办法
148
查看次数

在包含单个列值的多个文件中查找公共值

我有100个文本文件,每个文件包含单个列.文件如下:

file1.txt
10032
19873
18326

file2.txt
10032
19873
11254

file3.txt
15478
10032
11254
Run Code Online (Sandbox Code Playgroud)

等等.每个文件的大小不同.请告诉我如何找到所有这100个文件中常见的数字.

相同的数字在1个文件中只出现一次.

awk text-processing comm

3
推荐指数
1
解决办法
579
查看次数

查找两个文件之间的唯一行

我有两个非常大的文件(文件 1 和文件 2),文件 1 有很多行和列,为了简单起见,我粘贴了第 1 列。我只想打印文件 1 特有的那些行。

文件一:

AT1G01010.1
AT1G01020_P1
AT1G01020_P2
AT1G01040.2
AT1G01040_P1
AT1G01046.1
AT1G01050_ID7
Run Code Online (Sandbox Code Playgroud)

文件2:

AT1G01010
AT1G01046
AT1G01050
Run Code Online (Sandbox Code Playgroud)

输出:

AT1G01020_P1
AT1G01020_P2
AT1G01040.2
AT1G01040_P1
Run Code Online (Sandbox Code Playgroud)

我在 Ubuntu 中尝试过comm命令,但它不起作用,因为它检查完整的模式。因此,当它尝试检查时,AT1G01010.1AT1G01010不会显示任何常见内容。

text-processing unique comm

3
推荐指数
1
解决办法
3318
查看次数

bash:join 和 comm 之间的区别

# comm -12 /tmp/src /tmp/txt | wc -l
  10338
# join /tmp/src /tmp/txt | wc -l
  10355
Run Code Online (Sandbox Code Playgroud)

这两个文件都是单列字母数字字符串和sort-ed。他们不应该是一样的吗?


更新以下@Kevin-s 回答:

cat /tmp/txt | sed 's/^[:space:]*//' > /tmp/stxt
cat /tmp/src | sed 's/^[:space:]*//' > /tmp/ssrc
Run Code Online (Sandbox Code Playgroud)

结果:

#join /tmp/ssrc /tmp/stxt | wc -l
516
# comm -12 /tmp/ssrc /tmp/stxt | wc -l
513
Run Code Online (Sandbox Code Playgroud)

在手动检查diff-s 时...结果不同,因为sed.

bash join comm

2
推荐指数
1
解决办法
2395
查看次数

文件2的子集行基于文件1 UNIX中单列的公共值

我正在处理大文件,我只想提取一列的值包含在另一个文件的列的值中的行.

例如,在file1中,我有10,000行看起来像这样:

Chr13998356 T   C
Chr1401532  A   G
Chr14021851 A   T
Run Code Online (Sandbox Code Playgroud)

我有file2(100,000+行),其中我只想要文件1的第1列中第1列中的值的行.因此,对于文件2,我有:

Chr1    401530  G   G   60  0   60  11
Chr1    401531  A   A   60  0   60  11
Chr1    401532  A   G   30  170 60  11
Run Code Online (Sandbox Code Playgroud)

我想以第三个文件结束:

Chr1    401532  A   G   30  170 60  11
Run Code Online (Sandbox Code Playgroud)

此文件可以包含几到10,000行.

在R中,我会使用类似的东西df3 <- df2[df2[,1] %in% df1[,2],],但文件太大了.

有简单的UNIX解决方案吗?像使用comm这样的东西,但只匹配第一列而不是整行,这将是完美的.或者grep的东西,但同时搜索10K模式.

有任何想法吗?

unix awk grep comm

2
推荐指数
1
解决办法
1040
查看次数

比较二进制文件并仅打印匹配行的偏移量

对于常规文件,我可以使用 comm命令来查找公共行。

例如我们有两个文件

$ cat f1
line1
line2
line3
line4
line5

$ cat f2
line1
line20
line30
line4
line5
Run Code Online (Sandbox Code Playgroud)

它比较像:

$ comm -12 f1 f2
line1
line4
line5
Run Code Online (Sandbox Code Playgroud)

如何找到匹配行的偏移量以及如何对两个二进制文件进行比较并打印匹配行偏移量?

我一直在使用诸如diff, cmp,comm过去1小时,摸不清头脑。

编辑 1:不是确切的解决方案,但发现 vbindiff 有帮助。

linux diff binaryfiles cmp comm

2
推荐指数
1
解决办法
3101
查看次数

如何跨多个文件提取公共行?

我有15个不同的文件,我想要一个新文件,其中只包含所有文件中的公共行.例如:

File1:

id1
id2
id3

file2:

id2
id3
id4

file3:
id10
id2
id3

file4

id100
id45
id3
id2

I need the output be like:

newfile:

id2 
id3
Run Code Online (Sandbox Code Playgroud)

我知道这个命令适用于每对文件:

grep -w -f file1 file2>输出

但我需要一个命令来工作超过2个文件.

有什么建议吗?

shell perl grep comm

2
推荐指数
1
解决办法
153
查看次数