2013-05-13 48 views
1

我试图为每个用户安装一个软件安装列表。我有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

+0

你没看到错误消息'通讯:文件1不是有序 '? – 2013-05-13 23:07:37

+0

'comm -2 file1.txt file2.txt | awk -f'\ t''{print $ 2}''? – Kevin 2013-05-13 23:17:51

+0

@Kevin,你的意思是'-F'\ t'' – 2013-05-13 23:23:57

回答

1

假设你有固定的排序问题:

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


y 
y 
+0

对不起,我动态构建了例子,因此我没有正确地进行手工分类。这工作完美。 – 2013-05-14 01:49:53

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是什么?

+0

你也可以''打印'Y'''而不是'print $ 0'作为奖励积分。 – 2013-05-13 23:02:08

+0

.......奖金可以这么容易..... – Kent 2013-05-13 23:06:08

+0

这也适用 - 对原始问题的排序顺序感到抱歉。 – 2013-05-14 01:56:11

相关问题