使用Bash-Awk/Sed实现文件字符串列表与单个字符串拼接
我来给你几个实用的解决方案,用Awk和Bash都能轻松实现你要的字符串拼接需求:
使用Awk实现(推荐,简洁高效)
Awk天生擅长处理文本字段,这个方案先把File1的所有字符串存起来,再逐个用File2的前缀拼接:
awk ' # 处理第一个输入文件File1,把每个字符串存入数组 NR == FNR { for (i=1; i<=NF; i++) { strs[++count] = $i } next } # 处理第二个输入文件File2 { # 初始化当前行的输出内容 result = "" # 遍历File2的每个前缀 for (j=1; j<=NF; j++) { prefix = $j # 把前缀和每个File1的字符串拼接 for (k=1; k<=count; k++) { result = result (result ? " " : "") prefix strs[k] } } # 输出最终拼接结果 print result }' File1.txt File2.txt > output.txt
代码说明:
NR == FNR:Awk的常用技巧,用来识别第一个输入文件(这里是File1),把它的每个字段(空格分隔的字符串)存入数组strs。- 处理File2时,遍历每个前缀,再和
strs里的所有字符串拼接,最后把所有拼接结果连成一行输出,自动避免末尾多余空格。
使用Bash原生命令实现
如果你更倾向于用纯Bash脚本,也可以通过数组和循环来完成:
# 把File1的内容读入数组(空格分隔) read -ra file1_strings < File1.txt # 把File2的内容读入数组 read -ra file2_prefixes < File2.txt # 初始化输出变量 output="" # 遍历每个前缀 for prefix in "${file2_prefixes[@]}"; do # 遍历File1的每个字符串,拼接后加入输出 for str in "${file1_strings[@]}"; do output+="${prefix}${str} " done done # 去掉末尾多余的空格,写入输出文件 echo "${output% }" > output.txt
代码说明:
read -ra:把文件内容按空格分割成数组元素,-r避免转义字符被解析,-a指定存入数组。${output% }:Bash的参数扩展语法,用来去掉变量末尾的空格,保证输出格式整洁。
测试验证
用你给出的示例输入:
File1.txt内容:
asa exe dada 123 3456 nani example lol
File2.txt内容:Rexample Example
运行任意一个脚本后,output.txt会生成你期望的结果:Rexampleasa Rexampleexe Rexampledada Rexample123 Rexample3456 Rexamplenani Rexampleexample Rexamplelol Exampleasa Exampleexe Exampledada Example123 Example3456 Examplenani Exampleexample Examplelol
内容的提问来源于stack exchange,提问作者rang runera
相关产品推荐
相关产品推荐

