我想练习使用head
,uniq
和cut
, 来获取这些数据这里。我知道这个线但它过于关注cat
外部程序。
我想要一个更简单的答案。
我想从数据文件中获取间隔,例如第 800-1600 行。我不确定是否cut
使用标志-n
和来执行此任务-m
。至少,我无法提取行,只能提取某些字节位置中的模式。
运行 mikeserv 的答案
代码1.sh:
for i in 2 5
do head -n"$i" >&"$((i&2|1))"
done <test.tex 3>/dev/null
和数据
1
2
3
4
5
6
7
8
9
10
11
运行代码 assh 1.sh
给出空行作为输出,尽管它应该给出3 4 5 6 8
.我对迈克的回答有何理解错误?
如何通过 、 和 来选择数据中sed
的tail
行head
间隔cut
?
答案1
科斯塔斯在评论中的优雅回答
sed '800,1600 ! d' file
答案2
for i in 799 800
do head -n"$i" >&"$((i&2|1))"
done <infile 3>/dev/null
上面的代码将发送一个文件的前 799 行lseek()
有能力的<infile
to /dev/null
,以及接下来的 800 行与 stdout 相同。
如果你想修剪这 800 行顺序的唯一的,只需附加|uniq
.在这种情况下,你也可以这样做:
sed -ne'800,$!d;1600q;N;/^\(.*\)\n\1$/!P;D' <infile
...但谨慎的赌徒会把钱投入head;head|uniq
比赛。
如果你想处理这些行完全sort
编辑uniques,那么您仍然可以使用第一个for
循环并附加:
... 3>/dev/null | grep -n '' |
sort -t: -uk2 | sort -t: -nk1,1 |
cut -d: -f2-
在后一种情况下,可能值得export LC_ALL=C
首先这样做。