Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何列出文件内容';你选了哪一行?_Shell_Unix - Fatal编程技术网

Shell 如何列出文件内容';你选了哪一行?

Shell 如何列出文件内容';你选了哪一行?,shell,unix,Shell,Unix,我想从第四行到最后一行列出文件的内容,然后从第一行到第三行显示内容表单,并将两个o/p追加到新文件中。这将从第四行打印到最后一行 awk 'NR>=4' file 这将从第一行打印到第三行 awk 'NR<4' file 我们将-n选项tail与+一起使用: -n、 --行=K 输出最后K行,而不是最后10行或使用-n+K来 以第k行开始的输出行 这将从第4行打印到最后一行 awk 'NR>=4' file 这将从第一行打印到第三行 awk 'NR<4' file

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

这将从第四行打印到最后一行

awk 'NR>=4' file
这将从第一行打印到第三行

awk 'NR<4' file
我们将
-n
选项
tail
+
一起使用:

-n、 --行=K

输出最后K行,而不是最后10行或使用-n+K来 以第k行开始的输出行


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

awk 'NR>=4' file
这将从第一行打印到第三行

awk 'NR<4' file
我们将
-n
选项
tail
+
一起使用:

-n、 --行=K

输出最后K行,而不是最后10行或使用-n+K来 以第k行开始的输出行


这也可以使用sed完成:

$ sed -ne '4,$p' inp.txt > out.txt
$ sed -ne '4q;p' inp.txt >> out.txt
如果您愿意,最后一行可以缩短为
sed3qinp.txt>>out.txt。我这样做是为了,如果您想使用单个断点自动生成sed脚本,就不需要做任何额外的计算

当然,您也可以将其设置为更复杂的单行线:

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

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

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

这也可以使用sed来完成:

$ sed -ne '4,$p' inp.txt > out.txt
$ sed -ne '4q;p' inp.txt >> out.txt
如果您愿意,最后一行可以缩短为
sed3qinp.txt>>out.txt。我这样做是为了,如果您想使用单个断点自动生成sed脚本,就不需要做任何额外的计算

当然,您也可以将其设置为更复杂的单行线:

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

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

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

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

单线 这将只打印文件中5行选定的行

sed -n '5p' yourFilesPath
对于多行

sed -n '1,5p' yourFilesPath

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

单线 这将只打印文件中5行选定的行

sed -n '5p' yourFilesPath
对于多行

sed -n '1,5p' yourFilesPath

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

wc-l
将为您提供行数

echo`expr\`wc-l
将提供大于3的行数。将其馈送给tail命令。就这样

-bash-2.05b$
tail-`expr\`wc-l

第4行
第5行
第6行
第7行
第8行
第9行
第10行
-bash-2.05b$
-bash-2.05b$head-3文件
第1行
第2行
第3行
-bash-2.05b$
-bash-2.05b$
tail-`expr\`wc-l
>输出文件
-bash-2.05b$head-3文件>>输出文件
-bash-2.05b$
-bash-2.05b$cat输出文件
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第1行
第2行
第3行


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

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

wc-l
将为您提供行数

echo`expr\`wc-l
将提供大于3的行数。将其馈送给tail命令。就这样

-bash-2.05b$
tail-`expr\`wc-l

第4行
第5行
第6行
第7行
第8行
第9行
第10行
-bash-2.05b$
-bash-2.05b$head-3文件
第1行
第2行
第3行
-bash-2.05b$
-bash-2.05b$
tail-`expr\`wc-l
>输出文件
-bash-2.05b$head-3文件>>输出文件
-bash-2.05b$
-bash-2.05b$cat输出文件
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第1行
第2行
第3行


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

我不知道它会这么简单,我使用的是head和tail,无法理解它。非常感谢你,所以…你根本不明白?!哈哈。有用的答案,谢谢fedorqui。@Suraj我用
和&
版本更新了我的答案。这有点棘手。一个比
awk'n更好的解决方案很有趣,@ghoti。然而,我尝试了
awk'NR==4{nextfile}1'myfile
并打印了所有内容。我不知道它会这么简单,我使用的是head和tail,无法理解。非常感谢你,所以……你没办法弄明白