为了满足您的确切规格,这将起作用。如果规格发生变化,您需要尝试一下,
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
不确定如何bold
通过 unix 管道获取标头“传输”。;->
回想一下,awk
程序都有一个基本的底层结构,即
awk 'pattern{action}' file
因此pattern
可以是一系列行、一个正则表达式、一个表达式 ( NF==4
)、缺失或其他一些东西。
这action
是模式匹配时发生的情况。这是更传统的外观code
。
如果未pattern
指定,则action
适用于读取的所有行。如果没有action
指定,但pattern
匹配,则打印该行(不用多说)。
NF
表示当前行中的 umberOf 字段,因此N
只会处理具有 2 个字段的行(因子 B 中的尾随记录)。F
NF==2
||
是一个逻辑OR
运算符,因此该块将只处理字段数为 的记录3 OR 4
。希望这些print
陈述是不言自明的。
,
分隔符($1,$2,$3
例如)是转换为 awk 的内部变量 的语法,OFS
即OutputFieldSeparator
,可以像这样分配OFS="\t"
(给出 tab char 的 OFS),或者在这种情况下,我们没有指定值,所以我们重新获得 OFS 的默认值,即空格 char ( " "
)(没有引号!)
IHTH