我需要帮助合并两个管道分隔文件的内容。
文件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”声明的帮助,将不胜感激。
答案 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
这两个都避免处理主程序中的两个文件(awk
或sed
);他们让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。