在保留位置行的同时合并csh中的文本文件

时间:2015-01-23 02:39:21

标签: shell csh mks

我有大约100个带有两列的文本文件,我想通过使用因子" A"将其合并到c shell脚本中的单个文件中。

例如,我有一个看起来像这样的文件A.
A B1
1 100
2 200
3 300
4 400

和文件B看起来像这样
A B2
1 100
2 200
3 300
4 400
5 300
6 400

我希望最终文件C看起来像这样:
A B1 B2
1 100 100
2 200 200
3 300 300
4 400 400
5 300
6 400


cat函数只将文​​件放在另一个上面并将它们粘贴到文件C中。我想将数据放在一起。这可能吗?

1 个答案:

答案 0 :(得分:0)

为了满足您的确切规格,这将有效。如果规范发生变化,你需要玩这个,

paste -d' ' factorA factorB \
| awk 'NF==4||NF==3{print $1, $2, $3} NF==2{print$1, $2}' \
> factorC

# note, no spaces or tabs after each of the contintuation chars `\` at end of lines!

<强>输出

$ cat factorC
A B1 B2 
1 100 100 
2 200 200 
3 300 300 
4 400 400 
5 300 
6 400

不确定如何通过unix管道获取bold标头到“trasmit”。 ; - &GT;

回想一下,awk程序都有一个基本的底层结构,即

awk 'pattern{action}' file

所以pattern可以是一系列行,一个reg-exp,一个表达式(NF==4),缺少或其他一些东西。

action是模式匹配时发生的事情。这是更传统的code

如果未指定pattern,则action适用于所有读取的行。如果未指定action,但pattern匹配,则会打印该行(不再赘述)。

NF表示当前行中N umberOf F ield,因此NF==2只处理包含2个字段的行(factorB中的尾随记录)。

||是一个逻辑OR运算符,因此该块只会处理记录,其中字段数为3 OR 4。希望print语句不言自明。

,分隔$1,$2,$3(例如)是转换为awk的内部变量OFS的语法,OutputFieldSeparator,可以像{{1}一样分配(给一个tab char的OFS),或者在这种情况下,我们没有指定一个值,所以我们得到OFS的默认值,即空格char(OFS="\t")(no引号!)

IHTH