如何检查输入是否包含全部 26 个字符

如何检查输入是否包含全部 26 个字符

我有一个输入文件,每行包含一个字符,我想检查该文件是否恰好包含所有 26 个字母。我发现这uniq -d可以帮助获得重复的结果。但如何找出缺失的字符呢?会有grep用吗?

答案1

是的,你可以这样做grep

printf %s\\n {a..z} | grep -vf infile

或使用sort/join和现代 shell:

sort -u infile | join -v2 - <(printf %s\\n {a..z})

或者,类似地,使用awk

awk 'NR==FNR{z[$0]++;next}!($0 in z)' infile <(printf %s\\n {a..z})

答案2

...或与comm

printf %s\\n {a..z} | comm -23 - <(sort infile)

这里我们抑制 comm 的输出,除了“文件 1”特有的行之外。文件1是printf字母表;文件 2 是(需要)排序的输入。文件 2“infile”中缺少的任何字母都将由 comm 报告。

相关内容