2014-11-17 137 views
1

您好,我試圖粘貼多個文件(每個具有一列,但不同數量的行)在一起。粘貼命令留下空行

paste file1.txt file2.txt paste3.txt ... paste100 > out.txt 

輸入文件1:

A 
B 
C 

輸入文件2:

D 
E 

輸入文件3:

F 
G 
H 
I 
J 

輸出:

A D F 
B E G 
C  H 
     I 
     J 

當我從out.txt文件中刪除第2列(cut -f2)時,它給第2列帶來3個空行(可能是因爲列有5行以便與第3列匹配,它創建了2個額外的空行) 。第1列(少out.txt | cut -f1)同樣適用於2行空行。任何想法爲什麼它顯示空行?

less out.txt | cut -f1

A 
B 
C 
empty cell 
empty cell 

less out.txt |切-f2

D 
E 
empty cell 
empty cell 
empty cell 

我期待見式

列1

A 
B 
C 

列2

D 
E 

回答

3

無行是空的,有些人就是不沒有填充所有字段,但他們仍然有粘貼輸出的字段分隔符(製表符)。 cut無法知道您不希望打印空白字段。

嘗試:

awk -v f=1 -F'\t' '$f!=""{print $f}' file 
awk -v f=2 -F'\t' '$f!=""{print $f}' file 

代替。

1

我們可以用awk來替換空白字段,用爲空的單元格的值。在這裏我用'|'作爲分隔符以使替換操作完美無缺。如果需要tr -s '|' '\t',分隔符可以再次轉換爲製表符或空格。

$ paste -d '|' {a,b,c}.txt|awk 'BEGIN{FS=OFS="|"} {print ($1=="" ? "empty cell" : $1), ($2=="" ? "empty cell" : $2), ($3=="" ? "empty cell" : $3)}' 

輸出與管道分隔。

A | d | F
乙|電子| G
Ç|空單元| H
空單元|空單元| I
空單元|空單元|百靈

以製表符分隔的輸出。

A D F 
B E G 
C empty cell H 
empty cell empty cell I 
empty cell empty cell J