chr*_*lee 62 tail text-processing head
有没有办法head/tail一个文件并获得反向输出;因为您不知道文档中有多少行?
即我只想获取除前两行之外的所有内容foo.txt以附加到另一个文档。
Sté*_*nez 64
您可以使用它来去除前两行:
tail -n +3 foo.txt
Run Code Online (Sandbox Code Playgroud)
这是剥离最后两行:
head -n -2 foo.txt
Run Code Online (Sandbox Code Playgroud)
(假设文件以后者结尾\n)
就像为标准的使用tail和head这些操作不是破坏性的。使用>out.txt,如果你想将输出重定向到一些新的文件:
tail -n +3 foo.txt >out.txt
Run Code Online (Sandbox Code Playgroud)
在out.txt已经存在的情况下,它会覆盖这个文件。使用>>out.txt替代>out.txt,如果你宁愿输出追加到out.txt。
如果您想要除前 N-1 行以外的所有行,请tail使用行数调用+N。(数字是要保留的第一行的编号,从1开始,即+1表示从最上面开始,+2表示跳过一行,以此类推)。
tail -n +3 foo.txt >>other-document
Run Code Online (Sandbox Code Playgroud)
没有简单、便携的方法可以跳过最后 N 行。GNUhead允许head -n +N作为tail -n +N. 否则,如果你有tac(例如 GNU 或 Busybox),你可以将它与 tail 结合起来:
tac | tail -n +3 | tac
Run Code Online (Sandbox Code Playgroud)
便携地,您可以使用 awk 过滤器(未经测试):
awk -vskip=2 '{
lines[NR] = $0;
if (NR > skip) print lines[NR-skip];
delete lines[NR-skip];
}'
Run Code Online (Sandbox Code Playgroud)
如果要从大文件中删除最后几行,可以确定要截断的片段的字节偏移量,然后使用dd.
total=$(wc -c < /file/to/truncate)
chop=$(tail -n 42 /file/to/truncate | wc -c)
dd if=/dev/null of=/file/to/truncate seek=1 bs="$((total-chop))"
Run Code Online (Sandbox Code Playgroud)
您不能在一开始就原地截断文件,但如果您需要删除大文件的前几行,您可以将内容移动到.
| 归档时间: |
|
| 查看次数: |
49853 次 |
| 最近记录: |