Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何粘贴n次同一列?_Bash_Paste - Fatal编程技术网

Bash 如何粘贴n次同一列?

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 带

我有两个不同长度的文件,例如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

带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总是只有一行吗?是的。你的解决方案非常有效。非常感谢你