paste命令留下空行

时间:2014-11-17 02:43:34

标签: awk paste cut

您好我试图将多个文件(每个文件都有一个列但行数不同)粘贴在一起。

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个空行。任何想法为什么会显示空行?

少了out.txt | cut -f1

A
B
C
empty cell
empty cell

少了out.txt | cut -f2

D
E
empty cell
empty cell
empty cell

我原本希望看到 -

第1栏

A
B
C  

第2栏

D
E

2 个答案:

答案 0 :(得分:3)

没有行是空的,其中一些行只是没有填充所有字段,但它们仍然有粘贴输出的字段分隔符(制表符)。 cut无法知道您不希望打印空白字段。

尝试:

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

代替。

答案 1 :(得分: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
  B | E | G
  C |空单元| H
  空单元格|空单元格| I
  空单元|空单元| J

以制表符分隔的输出。

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