2013-05-13 52 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

相關問題