>我有两个文本文件。 第一个看起来像这样:
a
b
c
另一个文件如下所示:
1 2
3 4
我想在 Linux 中使用 bash 脚本来合并这两个文件,以便第一个文件的每一行都放在第二个文件的所有行旁边,输出如下所示:
a 1 2
a 3 4
b 1 2
b 3 4
c 1 2
c 3 4
任何帮助将不胜感激
你可以像这样使用awk
:
awk 'NR==FNR{a[++n]=$0; next} {for (i in a) print $0, a[i]}' file2 file1
a 1 2
a 3 4
b 1 2
b 3 4
c 1 2
c 3 4
参考:有效的AWK编程
在纯 shell 中,您可以简单地执行以下操作:
#Usage: the_script FirstFile SecondFile
while read -r l1; do
while read -r l2 ; do
echo "$l1 $l2"
done <"$2"
done <"$1"
但是文件最好不要大,因为 shell 读取效率不高(它们对每个字节进行系统调用(。
再尝试一个awk,它将以与Input_file1相同的顺序给出输出。
awk 'FNR==NR{a[++i]=$0;next} {c[++k]=$0} END{for(q=1;q<=i;q++){for(u=1;u<=k;u++){print a[q],c[u]}}}' Input_file1 Input_file2
我可能会被无情地否决,但我相信这类任务更适合Perl
或Python.
这是一个Python 2
解决方案:
$ cat 1col.tmp
a
b
c
$ cat 2col.tmp
1 2
3 4
$ cat merge.py
with open("1col.tmp") as col1f:
for c1 in col1f.readlines():
with open("2col.tmp") as col2f:
for c2 in col2f.readlines():
print c1.strip(), c2.strip()
$ python merge.py
a 1 2
a 3 4
b 1 2
b 3 4
c 1 2
c 3 4