合并shell中的两个文件,如paste命令

时间:2016-07-26 10:33:48

标签: linux shell

>cat tmp1

1

2

3

>cat tmp2

vol1

vol2

期待这个答案

vol1 1

vol1 2

vol1 3

vol2 1

vol2 2

vol2 3

3 个答案:

答案 0 :(得分:1)

如果行的顺序不那么重要

awk 'FNR==NR{a[$0];next}{for(i in a){print $0,i}}' tmp2 tmp1

如果您想恢复订单:

awk 'FNR==NR{a[FNR]=$0;l=FNR;next}{for(i=1;i<=l;i++){print $0,a[i]}}' tmp2 tmp1

答案 1 :(得分:1)

$ while read a; do while read b; do echo $a $b; done<tmp1; done<tmp2
vol1 1
vol1 2
vol1 3
vol2 1
vol2 2
vol2 3

或者有更好的缩进:

while read a; do
    while read b; do
        echo $a $b
    done <tmp1
done <tmp2

对于tmp2文件中的每个单词,请回显tmp1文件中的每个单词。

如果两个文件中的实际数据包含反斜杠,或者tmp2文件在第一列中包含破折号,那么以下内容将是更好,更强大的解决方案:< / p>

while read -r a; do
    while read -r b; do
        printf '%s %s\n' "$a" "$b"
    done <tmp1
done <tmp2

答案 2 :(得分:0)

刚刚找到了办法,

for file in `cat tmp1` 
do
        for f in `cat tmp2`
        do
                echo $file $f
        done
done