bash - awk/sed 将字符串列表添加到每个字符串
bash - awk/sed add list of strings to each string
好的,所以我想将一个文件中的字符串列表添加到另一个文件中的每个字符串中,示例 -
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
您可以使用 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[[=13=]]; next } { for (i in a) print i""[=13=] }' File2.txt File1.txt
我敢肯定有数百种不同的方法,但选择正确的方法取决于每个文件中的记录数。
对于非常大的数据集来说,一个有点笨拙但速度极快的解决方案是:
join -j 9999 -t '' -o 1.1,2.1 File2.txt File1.txt
这是我从@legolegs 对 How to produce cartesian product in Bash?
的回答中得到的
好的,所以我想将一个文件中的字符串列表添加到另一个文件中的每个字符串中,示例 -
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
您可以使用 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[[=13=]]; next } { for (i in a) print i""[=13=] }' File2.txt File1.txt
我敢肯定有数百种不同的方法,但选择正确的方法取决于每个文件中的记录数。
对于非常大的数据集来说,一个有点笨拙但速度极快的解决方案是:
join -j 9999 -t '' -o 1.1,2.1 File2.txt File1.txt
这是我从@legolegs 对 How to produce cartesian product in Bash?
的回答中得到的