2014-11-17 93 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