【问题标题】:replace a specific line/column combo with a specific line/column combo of another file用另一个文件的特定行/列组合替换特定的行/列组合
【发布时间】:2014-07-03 17:57:33
【问题描述】:

我有 2 个文本文件。文件1.txt,文件2.txt

我需要将 file1.txt 的第 3 行到第 5 行、第 3 列到第 5 列的所有字符替换为 file2.txt 的第 8 行到第 10 行、第 4 列到第 9 列。

为了更好地理解,我将文本文件的矩形区域替换为另一个文件中的矩形区域。注意,file2.txt 中的矩形长了几列。

谢谢!

【问题讨论】:

    标签: bash awk sed


    【解决方案1】:

    参数化解决方案:

    L1  = starting line in file1
    L2  = starting line in file2
    N   = number of lines
    F1a = starting field in file1
    F1b = ending field in file1
    F2a = starting field in file2
    F2b = ending field in file2
    
    awk -vL1=3 -vL2=8 -vN=3 -vF1a=3 -vF1b=5 -vF2a=4 -vF2b=9 '
    
        FNR == NR {
            if (FNR >= L2 && FNR < L2 + N) {
                a[FNR - L2] = $F2a
                for (i = F2a + 1; i <= F2b; ++i)
                    a[FNR - L2] = a[FNR - L2] OFS $i
            }
            next
        }
    
        FNR >= L1 && FNR < L1 + N {
            for (i = 1; i < F1a; ++i)
                printf("%s%s", i == 1 ? "" : OFS, $i)
            printf("%s%s", F1a == 1 ? "" : OFS, a[FNR - L1])
            for (i = F1b + 1; i <= NF; ++i)
                printf("%s%s", OFS, $i)
            print""
            next
        }
    
        1
    
    ' file2.txt file1.txt
    

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2022-11-17
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      相关资源
      最近更新 更多