您好我试图将多个文件(每个文件都有一个列但行数不同)粘贴在一起。
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
答案 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