このデータを得るためにhead
、uniq
および、使用を練習したいと思います。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の答えを理解するのに何が間違っているのでしょうか?
、およびデータ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
編集独自の場合でも、最初のfor
ループを使用して追加できます。
... 3>/dev/null | grep -n '' |
sort -t: -uk2 | sort -t: -nk1,1 |
cut -d: -f2-
後者の場合は、最初にこれを行うことをお勧めしますexport LC_ALL=C
。