Shell 如何列出文件内容';你选了哪一行?
我想从第四行到最后一行列出文件的内容,然后从第一行到第三行显示内容表单,并将两个o/p追加到新文件中。这将从第四行打印到最后一行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
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,无法理解。非常感谢你,所以……你没办法弄明白