我想列出从第四行到最后一行的文件内容,然后在第一行到第三行显示内容表格,并将o / p附加到新文件中。
答案 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
您也可以使用head
和tail
:
$ 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:)