bash - awk / sed为每个字符串添加字符串列表

时间:2018-04-23 03:55:31

标签: bash awk sed cygwin

好的,所以我想从一个文件中添加一个字符串列表到另一个文件中的每个字符串,例如 -

File1.txt(输入):

asa
exe
dada
123
3456
nani
example
lol

File2.txt(输入2):

Rexample
Example

预期output.txt:

Rexampleasa
Rexampleexe
Rexampledada
Rexample123
Rexample3456
Rexamplenani
Rexampleexample
Rexamplelol
Exampleasa
Exampleexe
Exampledada
Example123
Example3456
Examplenani
Exampleexample
Examplelol

1 个答案:

答案 0 :(得分:0)

您可以使用cat执行此操作并迭代每一行:

cat File2.txt | while read t2; do cat File1.txt| while read t1; do echo "${t2}${t1}"; done; done

但是,根据你在File2.txt中有多少行,这可能效率很低,因为你最终会多次打开File1.txt。

使用awk可能会更快:

awk 'NR==FNR { a[$0]; next } { for (i in a) print i""$0 }' File2.txt File1.txt

我确信有数百种不同的方法,但选择正确的方法取决于每个文件中的记录数量。

对于非常大的数据集来说,某种程度上是hackish但非常快速的解决方案是:

join -j 9999 -t '' -o 1.1,2.1 File2.txt File1.txt

最后我从@legolegs回答How to produce cartesian product in Bash?