行間隔でファイルの一部を選択します。

行間隔でファイルの一部を選択します。

このデータを得るためにheaduniqおよび、使用を練習したいと思います。cutここ。私はこの事実を知っていますワイヤーしかし、cat外部の手順にあまりにも焦点を当てています。

私はもっ​​と簡単な答えが欲しい。

データファイルから800〜1600行の間隔を取得したいと思います。cutフラグ-nとを使用するかどうかわかりません-m。少なくとも行は抽出できず、特定のバイト位置のパターンのみを抽出できます。

mikeservの回答を実行する

code1.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

コードをsh 1.sh次のように実行すると空白行が出力されます3 4 5 6 8。 Mikeの答えを理解するのに何が間違っているのでしょうか?

、およびデータ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編集独自の場合でも、最初のforループを使用して追加できます。

... 3>/dev/null  | grep -n ''      | 
sort -t: -uk2    | sort -t: -nk1,1 | 
cut  -d: -f2-

後者の場合は、最初にこれを行うことをお勧めしますexport LC_ALL=C

関連情報