如何粘贴同一列的n倍?

时间:2013-06-13 17:23:11

标签: bash paste

我有两个不同长度的文件,例如file1读取

A    
B    
C    
D    
E

和file2

1

我正在寻找一种创建file3的方法,如:

A  1
B  1
C  1
D  1
E  1

我知道如果file1和file2的长度相同,那么简单的paste file1 file2 > file3就可以解决问题。

2 个答案:

答案 0 :(得分:3)

取1

如果file2只有一行,我会做

awk -v f2="$(< file2)" '{print $0, f2}' file1

如果文件包含3行,并且您希望输出看起来像:

a 1
b 2
c 3
d 1
e 2

然后我会做

awk '
    NR==FNR {f2[FNR]=$0; n=FNR; next}
    {print $0, f2[((FNR-1)%n)+1]}
' file2 file1   

取2

这是一种使用粘贴和重复文件2的进程替换的疯狂方式,因此它与file1的长度相同

printf "%s\n" {A..Z} >|file1
seq 1 3 >| file2

paste file1 <(
    lf1=$(wc -l < file1)
    lf2=$(wc -l < file2)
    for (( i=0; i <= lf1/lf2; i++)); do
      cat file2
    done | head -n $lf1
)
A   1
B   2
C   3
D   1
E   2
F   3
G   1
H   2
I   3
J   1
K   2
L   3
M   1
N   2
O   3
P   1
Q   2
R   3
S   1
T   2
U   3
V   1
W   2
X   3
Y   1
Z   2

答案 1 :(得分:1)

awk的一种方式:

awk 'NR==FNR{a[NR]=$0;next}{x=a[FNR]?a[FNR]:x;$2=x}1' file2 file1 > file3