Bash 如何粘贴n次同一列?
我有两个不同长度的文件,例如file1读取Bash 如何粘贴n次同一列?,bash,paste,Bash,Paste,我有两个不同长度的文件,例如file1读取 A B C D E 和文件2 1 我正在寻找创建file3的方法,如: A 1 B 1 C 1 D 1 E 1 我知道,如果file1和file2的长度相同,那么简单的粘贴file1 file2>file3就可以解决这个问题。使用awk的单向方式: awk 'NR==FNR{a[NR]=$0;next}{x=a[FNR]?a[FNR]:x;$2=x}1' file2 file1 > file3 带
A
B
C
D
E
和文件2
1
我正在寻找创建file3的方法,如:
A 1
B 1
C 1
D 1
E 1
我知道,如果file1和file2的长度相同,那么简单的
粘贴file1 file2>file3
就可以解决这个问题。使用awk的单向方式:
awk 'NR==FNR{a[NR]=$0;next}{x=a[FNR]?a[FNR]:x;$2=x}1' file2 file1 > file3
带awk的单向开关
:
awk 'NR==FNR{a[NR]=$0;next}{x=a[FNR]?a[FNR]:x;$2=x}1' file2 file1 > file3
拿1
如果file2只有一行,我会这样做
awk -v f2="$(< file2)" '{print $0, f2}' file1
awk '
NR==FNR {f2[FNR]=$0; n=FNR; next}
{print $0, f2[((FNR-1)%n)+1]}
' file2 file1
那我就去
awk -v f2="$(< file2)" '{print $0, f2}' file1
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
)
拿1
如果file2只有一行,我会这样做
awk -v f2="$(< file2)" '{print $0, f2}' file1
awk '
NR==FNR {f2[FNR]=$0; n=FNR; next}
{print $0, f2[((FNR-1)%n)+1]}
' file2 file1
那我就去
awk -v f2="$(< file2)" '{print $0, f2}' file1
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
)
文件2总是只有一行吗?是的。你的解决方案非常有效。非常感谢文件2总是只有一行吗?是的。你的解决方案非常有效。非常感谢你