从通信输出一列​​而不丢失空行

时间:2013-05-13 22:46:58

标签: bash shell awk cut comm

我正在尝试为每个用户组装一个软件安装列表。我在file1.txt中有完整的用户列表,以及在file2.txt中安装了该软件的用户列表。我想最终只有file1.txt或file1.txt和file2.txt中的行,但包括空行。所以:

FILE1.TXT

bhope
bsmith
fjones
jdoe
zdirks

FILE2.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

但找不到使用cutawk保留空白行的方法。

2 个答案:

答案 0 :(得分: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 s?

答案 1 :(得分:1)

假设您已修复已排序的问题:

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


y
y