对于 shell 程序员来说,这可能是一个非常基本的问题。但是假设我有一个文本文件 A 和 B 并且 B 是 A 的子集。
我想创建一个包含 (AB) 数据的文本文件 C。
所以省略所有常见的行。
文件中的行是数字数据:比如
id , some aspect, other aspec.
谢谢。
有一个名为的实用程序comm
仅用于此目的:
comm -23 A B > C
where-2
的意思是“拒绝文件 B 独有的行”(你说没有),-3
意思是“拒绝两个文件共有的行”。
@BartonChittenden 提出了一个很好的观点:
comm -23 <(sort A) <(sort B) > C
一种使用方式awk
。重定向以将内容保存在任何文件中,而不是STDOUT
.
awk 'FNR == NR { data[ $0 ] = 1; next } FNR < NR { if ( $0 in data ) { next } print $0 }' fileB fileA
更新了更有效的命令。感谢彼得.O:
awk 'FNR==NR{data[$0]; next}; $0 in data{next}; 1' fileB fileA
awk 'FNR==NR{a[$0];next}(!($0 in a))' B A