如何重复 bash 中的行并粘贴到不同的列?
How to repeat lines in bash and paste with different columns?
在 bash 中是否有一种捷径可以根据需要重复文件的第一行,以便将其粘贴到 kronecker 产品类型的另一个文件中(对于你们这些数学家)?
我的意思是,我有一个文件 A:
a
b
c
和文件 B:
x
y
z
我想按如下方式合并它们:
a x
a y
a z
b x
b y
b z
c x
c y
c z
我可能会写一个脚本,逐行读取文件并循环遍历它们,但我想知道是否有一个简短的单行命令可以完成同样的工作。我想不出一个,如您所见,我也缺少一些要搜索的关键字。 :-D
提前致谢。
您可以使用这个单行 awk 命令:
awk 'FNR==NR{a[++n]=[=10=]; next} {for(i=1; i<=n; i++) print [=10=], a[i]}' file2 file1
a x
a y
a z
b x
b y
b z
c x
c y
c z
分手:
NR == FNR { # While processing the first file in the list
a[++n]=[=11=] # store the row in array 'a' by the an incrementing index
next # move to next record
}
{ # while processing the second file
for(i=1; i<=n; i++) # iterate over the array a
print [=11=], a[i] # print current row and array element
}
awk 的替代品
join <(sed 's/^/_\t/' file1) <(sed 's/^/_\t/' file2) | cut -d' ' -f2-
为 join
添加一个假密钥,使文件 1 的所有记录与文件 2 的所有记录相匹配,trim 之后
在 bash 中是否有一种捷径可以根据需要重复文件的第一行,以便将其粘贴到 kronecker 产品类型的另一个文件中(对于你们这些数学家)? 我的意思是,我有一个文件 A:
a
b
c
和文件 B:
x
y
z
我想按如下方式合并它们:
a x
a y
a z
b x
b y
b z
c x
c y
c z
我可能会写一个脚本,逐行读取文件并循环遍历它们,但我想知道是否有一个简短的单行命令可以完成同样的工作。我想不出一个,如您所见,我也缺少一些要搜索的关键字。 :-D
提前致谢。
您可以使用这个单行 awk 命令:
awk 'FNR==NR{a[++n]=[=10=]; next} {for(i=1; i<=n; i++) print [=10=], a[i]}' file2 file1
a x
a y
a z
b x
b y
b z
c x
c y
c z
分手:
NR == FNR { # While processing the first file in the list
a[++n]=[=11=] # store the row in array 'a' by the an incrementing index
next # move to next record
}
{ # while processing the second file
for(i=1; i<=n; i++) # iterate over the array a
print [=11=], a[i] # print current row and array element
}
awk 的替代品
join <(sed 's/^/_\t/' file1) <(sed 's/^/_\t/' file2) | cut -d' ' -f2-
为 join
添加一个假密钥,使文件 1 的所有记录与文件 2 的所有记录相匹配,trim 之后