1

我正在尝试为每个用户收集软件安装列表。我在 file1.txt 中有完整的用户列表,在 file2.txt 中有安装软件的用户列表。我想以仅在 file1.txt 或 file1.txt 和 file2.txt 中的行结束,但包括空白行。所以:

文件1.txt

bhope
bsmith
fjones
jdoe
zdirks

文件2.txt

bhope
jdoe
zdirks

我可以通过 中途到达那里comm -2 file1.txt file2.txt,这给了我:

<tab>bhope
bsmith
fjones
<tab>jdoe
<tab>zdirks

我希望输出为:

bhope
<blank line>
<blank line>
jdoe
zdirks

用“Y”替换实际输出行的奖励积分:

Y
<blank line>
<blank line>
Y
Y

但是找不到用cutor保留空行的方法awk

4

2 回答 2

1

这个单线应该给你想要的:

awk 'NR==FNR{a[$0];next}{if($0 in a)print $0;else print ""}' file2 file1

见下面的例子:

kent$  head file1 file2
==> file1 <==
bsmith
bhope
fjones
jdoe
zdirks

==> file2 <==
bhope
jdoe
zdirks

kent$  awk 'NR==FNR{a[$0];next}{if($0 in a)print $0;else print ""}' file2 file1

bhope

jdoe
zdirks

和....我不明白你的

奖励积分

部分。那些Y是什么?

于 2013-05-13T23:00:07.720 回答
1

假设您已经解决了排序问题:

comm -2 file1.txt file2.txt | awk -F'\t' '{print (NF==2?"y":"")}'
y


y
y
于 2013-05-13T23:26:00.793 回答