You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于另一文件数值重复输出字符串的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:02:00