我有两个长度不同的文件,例如 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
就可以解决问题。
如果 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
这是使用粘贴的疯狂方式和重复 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
一种方法awk
:
awk 'NR==FNR{a[NR]=$0;next}{x=a[FNR]?a[FNR]:x;$2=x}1' file2 file1 > file3