我有两个不同长度的文件,例如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
就可以解决问题。
答案 0 :(得分:3)
如果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的进程替换的疯狂方式,因此它与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