将最后四行移动到文本文件中的第二行

时间:2014-11-10 20:12:46

标签: linux unix sed tail

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

我假设使用了尾巴和sed,但到目前为止我没有太多运气。

3 个答案:

答案 0 :(得分: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解释为变量

如果您不想实际修改文件,而是打印到stdout:

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

答案 1 :(得分:2)

这是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行开始到第4行到最后一行之前的行。

答案 2 :(得分:0)

以下是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