2

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

A    
B    
C    
D    
E

和文件2

1

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

A  1
B  1
C  1
D  1
E  1

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

4

2 回答 2

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

这是使用粘贴的疯狂方式和重复 file2 的过程替换,因此它的长度与 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
于 2013-06-13T18:10:20.730 回答
1

一种方法awk

awk 'NR==FNR{a[NR]=$0;next}{x=a[FNR]?a[FNR]:x;$2=x}1' file2 file1 > file3
于 2013-06-13T17:41:01.223 回答