我有一个 .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>