合并Unix中多个文件的列

时间:2014-05-16 04:26:34

标签: linux shell unix

我需要帮助合并两个管道分隔文件的内容。

我有

文件1

a|b|1|test|0
v|3|r|rest|4
5|4|a|two|3
3|5|r|help|4

file2的

01May2014

我想要

file3的

a|b|1|test|0|01May2014
v|3|r|rest|4|01May2014
5|4|a|two|3|01May2014
3|5|r|help|4|01May2014

任何帮助,特别是涉及“awk”声明的帮助,将不胜感激。

3 个答案:

答案 0 :(得分:1)

使用AWK语言,这是一种方式:

awk 'FNR==NR { r = $0; next } { print $0, r }' OFS="|" file2 file1

结果:

a|b|1|test|0|01May2014
v|3|r|rest|4|01May2014
5|4|a|two|3|01May2014
3|5|r|help|4|01May2014

答案 1 :(得分:1)

由于您似乎知道file2中只有一行,您可以使用:

awk -v extra=$(<file2) -e '{ OFS="|"; print $0, extra }' file1

sed

sed -e 's/$/|'"$(<file2)"/' file1

这两个都避免处理主程序中的两个文件(awksed);他们让shell在file2上完成工作并使用该工作的结果。

$(<file2)符号相当于$(cat file2),但效率更高,而且是Bash扩展。

答案 2 :(得分:0)

取决于它需要的强大程度或通用性,这样的事情可以起作用:

sed "s/$/|$(cat file2)/" file1 > file3

这当然假设file2只是一行连接到file1中每行的末尾。 sed命令s / foo / bar /用“bar”替换所有出现的“foo”。在这种情况下,它用|替换行(“$”)的结尾然后输出命令“cat file2”。它为file1执行此操作,将输出重定向到file3。

相关问题