我有一个输入文件,每行包含一个字符,我想检查该文件是否恰好包含所有 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 报告。