如何使用awk或sed根据值列表将文件分成2部分?



我有两个文件。其中之一是包含许多列的主文件。另一个包含关于样本列表的信息。现在我想将主文件分成2部分,基于该样本(行)是否在第二个文件列表中。现在我使用如下代码

awk 'NR == FNR {a[$1]; next} !($1 in a)' $i.list $i > no_in_list.$i

排除列表中的样本,但我想知道是否可以保留列表中的样本。

您可以使用print >> "file"动作在指定的文件中打印,而不是标准输出(使用GNU awk测试):

awk -v nil="no_in_list.$i" -v il="in_list.$i" '
NR == FNR {a[$1]; next}
!($1 in a) {print >> nil}
($1 in a) {print >> il}' $i.list $i

最新更新