use*_*373 3 text-processing files
我有 2 个文本文件。让我们将它们命名为 file1.txt 和 file2.txt
file1.txt 如下
chr10 181144 225933
chr10 181243 225933
chr10 181500 225933
chr10 226069 255828
chr10 255989 267134
chr10 255989 282777
chr10 267297 282777
chr10 282856 283524
chr10 283618 285377
chr10 285466 285995
Run Code Online (Sandbox Code Playgroud)
file2.txt 如下
chr10 181144 225933
chr10 181243 225933
chr10 181500 225933
chr10 255989 282777
chr10 267297 282777
chr10 282856 283524
chr10 375542 387138
chr10 386930 387138
chr10 387270 390748
chr10 390859 390938
chr10 391051 394580
chr10 394703 395270
Run Code Online (Sandbox Code Playgroud)
我想在单个文件中输出的是
我写了一个 Perl 脚本来做到这一点,但我很确定必须有一个命令行或更简单的方法来做到这一点。
两个文件共有的行:
comm -12 file1.txt file2.txt > results.txt
Run Code Online (Sandbox Code Playgroud)
添加 file1.txt 独有的行:
comm -23 file1.txt file2.txt >> results.txt
Run Code Online (Sandbox Code Playgroud)
添加 file2.txt 独有的行:
comm -13 file1.txt file2.txt >> results.txt
Run Code Online (Sandbox Code Playgroud)
如果文件尚未排序,则必须事先排序,例如,如果您的 shell 支持进程替换
comm -12 <(sort file1.txt) <(sort file2.txt)
Run Code Online (Sandbox Code Playgroud)
等等。
有一个comm命令来完成这项工作。但是您可以通过结合其他标准工具(如grep、sort、uniq、 )来实现join。这是一个解决方案 use grep,等效于 using comm。
两个文件共有的行:
grep -xF -f file1 file2
comm -12 <(sort -u file1) <(sort -u file2)
Run Code Online (Sandbox Code Playgroud)
行仅在file1:
grep -vxF -f file2 file1
comm -23 <(sort -u file1) <(sort -u file2)
Run Code Online (Sandbox Code Playgroud)
行仅在file2:
grep -vxF -f file1 file2
comm -13 <(sort -u file1) <(sort -u file2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3114 次 |
| 最近记录: |