按行间隔选择文件的一部分

按行间隔选择文件的一部分

我想练习使用head,uniqcut, 来获取这些数据这里。我知道这个线但它过于关注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.我对迈克的回答有何理解错误?

如何通过 、 和 来选择数据中sedtailhead间隔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()有能力的<infileto /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首先这样做。

相关内容