【问题标题】:Move Last Four Lines To Second Row In Text File将最后四行移动到文本文件中的第二行
【发布时间】:2014-11-10 20:12:46
【问题描述】:

我需要移动文本文件的最后 4 行并将它们移动到文本文件的第二行。

我假设使用了 tail 和 sed,但是到目前为止我运气不佳。

【问题讨论】:

  • 请展示你的努力;输入和输出的示例也会有所帮助。

标签: linux unix sed tail


【解决方案1】:

这是headtail 解决方案。让我们从与 Glenn Jackman 相同的示例文件开始:

$ seq 10 >file

应用这些命令:

$ head -n1 file ; tail -n4 file; tail -n+2 file | head -n-4
1
7
8
9
10
2
3
4
5
6

解释:

  • head -n1 file

    打印第一行

  • tail -n4 file

    打印最后四行

  • tail -n+2 file | head -n-4

    打印从第 2 行开始到倒数第四行之前的行。

【讨论】:

    【解决方案2】:

    如果我猜对了,ed 可以处理你的任务:

    seq 10 > file
    
    ed file <<'COMMANDS'
    $-3,$m1
    w
    q
    COMMANDS
    
    cat file
    
    1
    7
    8
    9
    10
    2
    3
    4
    5
    6
    

    第 7、8、9、10 行已移至第 2 行

    $-3,$m1 表示,对于从“$-3”(最后一行前 3 行)到“$”(最后一行,将它们(“m”)移到第一行(“1 ")

    请注意,heredoc 已被引用,因此 shell 不会尝试将字符串 $-$m1 解释为变量

    如果您不想实际修改文件,而是打印到标准输出:

    ed -s file <<'COMMANDS'
    $-3,$m1
    %p
    Q
    COMMANDS
    

    【讨论】:

      【解决方案3】:

      这是一个awk 解决方案:

      seq 10 > file
      awk '{a[NR]=$0} END {for (i=1;i<=NR-4;i++) if (i==2) {for (j=NR-3;j<=NR;j++) print a[j];print a[i]} else print a[i]}' file
      1
      7
      8
      9
      10
      2
      3
      4
      5
      6
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-10
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        • 2012-04-06
        • 1970-01-01
        • 2017-04-07
        • 1970-01-01
        相关资源
        最近更新 更多