【问题标题】:Bash Script- How to compare two files and print out the missing data [duplicate]Bash Script-如何比较两个文件并打印出丢失的数据[重复]
【发布时间】:2021-03-30 21:52:30
【问题描述】:



现在我需要创建一个 bash 脚本,通过比较两个文件来打印出丢失的序列和文件名。

例如,我有一个文件 A,其中包含以下项目
ABC12.001
ABC12.002
ABC12.004
ABC12.006
ABC12.007
另一个名为 File B 的文件包含以下项目

ABC12.001
ABC12.002
ABC12.004
ABC12.006
我想要一个可以打印类似
“文件 B 中缺少序列 ABC.007”的输出
我应该如何处理这个问题?我想提供一些我尝试过的编码,但到目前为止我无法产生任何有用的东西。

【问题讨论】:

  • diff file_a file_bcomm -3 file_a file_b?

标签: bash shell grep


【解决方案1】:

喜欢这个?

line_a=`wc -l A|awk '{print $1}'`;line_b=`wc -l B|awk '{print $1}'`;sum_line=`expr $line_a + $line_b`;grep -qvf B A && grep -vf B A|xargs -n $sum_line|awk '{print "Sequence "$0" is missing from File B"}';grep -qvf A B && grep -vf A B|xargs -n $sum_line|awk '{print "Sequence "$0" is missing from File A"}'

或者像这样使用 bash 脚本:

#!/bin/bash
A=$1
B=$2
line_a=$(grep -c ^ $A)
line_b=$(grep -c ^ $B)
sum_line=`expr $line_a + $line_b`
grep -qvf $B $A && grep -vf $B $A|xargs -n $sum_line|awk -v vB="$B" '{print "Sequence "$0" is missing from File "vB}'
grep -qvf $A $B && grep -vf $A $B|xargs -n $sum_line|awk -v vA="$A" '{print "Sequence "$0" is missing from File "vA}'

【讨论】:

  • 这假设每一行都是唯一的并且顺序不重要,这意味着您可以将其减少到 sort + comm 甚至 sort | uniq
  • 这个建议的解决方案被否决了——不需要羞耻的理由。我建议稍微提高性能 - 替换 wc -l $(grep -c ^ A ...
猜你喜欢
  • 1970-01-01
  • 2015-05-23
  • 2020-12-29
  • 2013-06-17
  • 2016-12-24
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
相关资源
最近更新 更多