如何列出文件内容的选定行?

时间:2013-09-17 15:48:02

标签: shell unix

我想列出从第四行到最后一行的文件内容,然后在第一行到第三行显示内容表格,并将o / p附加到新文件中。

4 个答案:

答案 0 :(得分:5)

这将从第4行打印到最后一行。

awk 'NR>=4' file

这将从第一行打印到第3行。

awk 'NR<4' file

按顺序获得所有输出:

awk 'NR>=4' file >  new_file
awk 'NR<4'  file >> new_file

测试

$ cat a
line1
line2
line3
line4
line5
line6
line7
line8
line9
line10
$ awk 'NR>=4' a
line4
line5
line6
line7
line8
line9
line10
$ awk 'NR<4' a
line1
line2
line3
$ awk 'NR>=4' a > new_file
$ awk 'NR<4' a >> new_file
$ cat new_file 
line4
line5
line6
line7
line8
line9
line10
line1
line2
line3

更新

您也可以使用headtail

来执行此操作
$ tail -n +4 a
line4
line5
line6
line7
line8
line9
line10
$ head -n 3 a
line1
line2
line3

我们使用-n的{​​{1}}选项和tail

  

-n, - lines = K

     

输出最后K行,而不是最后10行; 或使用-n + K来   以Kth开头的输出行

答案 1 :(得分:2)

这也可以使用sed:

完成
$ sed -ne '4,$p' inp.txt > out.txt
$ sed -ne '4q;p' inp.txt >> out.txt

如果您愿意,最后一行可以缩短为sed 3q inp.txt >> out.txt。我是这样做的,所以如果你想用一个断点自动生成你的sed脚本,你就不需要做任何额外的数学运算了。

当然,你也可以把它变得更加复杂:

$ sed -ne '1x;2,3H;4,$p;${x;p;}' inp.txt > out.txt

细分如下:

  • 1x - 将第一行存储在sed的“hold”缓冲区中。
  • 2,3H - 将后续行追加到“hold”缓冲区,直到我们的断点。
  • 4,$p - 如果当前行号为“4到结尾”,则只需打印即可。
  • ${x;p;} - 在最后一行,交换保持缓冲区和模式空间,然后打印。

这看起来有点神秘。它是。如果断点(“4”)是一个会改变的数字,则需要更多的数学运算。但是sed是 tiny ,并且它作为一个单独的进程运行,因此如果你以这种方式处理许多文件,它可能会快得多。

答案 2 :(得分:0)

您还可以尝试以下方法: -

单线 这将在文件

中仅打印5个选定行
sed -n '5p' yourFilesPath

对于多行

sed -n '1,5p' yourFilesPath

答案 3 :(得分:0)

使用'head'和'tail'命令的问题是你需要知道给定文件中的总行数。您可以使用'wc'命令来了解文件中的行数。

wc -l < file会为您提供行数。

echo `expr \`wc -l < file\` - 3`会为您提供行数&gt; 3.将它送到tail命令。就是这样。

-bash-2.05b $ tail -`expr \`wc -l < file\` - 3` file
4号线
LINE5
LINE6
line7
line8
line9
line10
-bash-2.05b以上$
-bash-2.05b $ head -3 file
一号线
2号线
3号线
-bash-2.05b以上$
-bash-2.05b $ tail -`expr \`wc -l < file\` - 3` file&gt; OUTPUT_FILE
-bash-2.05b $ head -3 file&gt;&gt; OUTPUT_FILE
-bash-2.05b以上$
-bash-2.05b $ cat output_file
4号线
LINE5
LINE6
line7
line8
line9
line10
一号线
2号线
line3中

不像之前发布的答案那样优雅,而只是另一种方式。请注意,此解决方案将一直有效,直到行数> = 3:)