我有大约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中。我想将数据放在一起。这可能吗?
答案 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