基于另一文件数值重复输出字符串的awk实现方案问询
使用Awk实现按指定次数重复每行字符串
没问题,这事儿用Awk完全能搞定,我给你两种实用的写法,按需选就行~
方法一:结合paste简化输入处理
这种方式先用paste把两个文件的对应行合并成一行(默认用制表符分隔),再交给Awk处理,逻辑更直观:
paste file1.txt file2.txt | awk '{ # 循环指定次数,拼接目标字符串 output = "" for(i=1; i<=$2; i++) { output = output $1 " " } # 去掉末尾多余的空格后打印 sub(/ $/, "", output) print output }' > desired_output_file.txt
方法二:纯Awk内部读取双文件
如果不想依赖paste,可以让Awk直接读取两个文件的对应行,代码稍微长一点但更独立:
BEGIN { # 循环读取两个文件的对应行 while ((getline str < "file1.txt") > 0) { getline cnt < "file2.txt" # 确保次数是数值类型,避免格式干扰 cnt += 0 output = "" for(i=1; i<=cnt; i++) { output = output str " " } sub(/ $/, "", output) print output } # 记得关闭文件句柄 close("file1.txt") close("file2.txt") } > desired_output_file.txt
测试验证
假设你的输入文件内容如下:
file1.txt:
Hello
Beautiful
World
file2.txt:
2
4
3
运行上面任意一种命令后,desired_output_file.txt的内容会是:
Hello Hello Beautiful Beautiful Beautiful Beautiful World World World
小细节说明
- 我加了
sub(/ $/, "", output)是为了去掉每行末尾多余的空格,如果你不在意这个空格,直接用循环printf "%s ", $1然后print ""也可以,只是末尾会多一个空格。 - 第二种方法里的
cnt += 0是为了确保读取到的次数是数值,避免因为文件里的内容有空格等干扰导致循环出错。
内容的提问来源于stack exchange,提问作者Gunther
相关产品推荐
相关产品推荐

