如何生成或打印错过的序列?

如何生成或打印错过的序列?

我有一个 .txt 文件,其示例如下,

010.123.32.0001
010.123.32.0021
010.123.33.0001
...
010.123.33.9991
010.123.32.9012
010.123.33.0005

我需要获取(或换句话说打印)那些不存在于我的文件中的序列,我只是想生成一个包含所有现有序列的文件,然后对其执行 grep 或 awk 以获取那些存在于 fakeGeneratedAllSequences 中但不存在于我的真实文件中的序列,并使用 greping

grep -Fvf sequences.txt fakeGeneratedAllSequences > missedSequences

但我正在寻找一个命令,如果可以轻松得到这个错过的序列,谢谢

答案1

这应该可以做到:

grep -xvFf file.txt <(printf '%s\n' 010.123.{32..33}.{0001..9999})
  • printf '%s\n' 010.123.{32..33}.{0001..9999}生成所有可能的模式(更改范围以满足您的需要),括号扩展,,{start..end}在这里进行范围扩展

  • 输出grep作为文件描述符,通过进程替换完成<()

grep选项:

  • -x是否整行匹配
  • -v反转匹配
  • -F按字面意思处理模式,不进行正则表达式扩展
  • -f按照此选项从文件中获取输入模式

例子:

% cat file.txt
010.123.32.0001
010.123.32.0021
010.123.33.0001
010.123.33.9991
010.123.32.9012
010.123.33.0005

% grep -xFf file.txt <(printf '%s\n' 010.123.{32..33}.{0001..9999})
010.123.32.0001
010.123.32.0021
010.123.32.9012
010.123.33.0001
010.123.33.0005
010.123.33.9991

% grep -xvFf file.txt <(printf '%s\n' 010.123.{32..33}.{0001..9999})
010.123.32.0002
010.123.32.0003
010.123.32.0004
010.123.32.0005
010.123.32.0006
010.123.32.0007
010.123.32.0008
010.123.32.0009
010.123.32.0010
010.123.32.0011
<truncated>

相关内容