質問ここパターンマッチングの前後に数行の入力が必要です。
しかし、ここでの目標は行番号を取得し、ファイルから行番号の前後のいくつかの行を取得することです。
たとえば、
seq 10
1
2
3
4
5
6
7
8
9
10
行番号が6の場合は、行の前に4桁、行の後に3桁を入力する必要があります。それは
2
3
4
5
6
7
8
9
ベストアンサー1
z=6 # focus line
x=4 # lines before
y=3 # lines after
start=$(( z - x ))
end=$(( z + y ))
使用sed
:
seq 10 | sed -n "$start,${end}p"
2
3
4
5
6
7
8
9
これは明示的な行範囲を印刷するためにprint(p
)コマンドを使用します。sed
別の行を無視してください-n
。
使用awk
:
seq 10 | awk -v start="$start" -v end="$end" 'NR >= start { print } NR >= end { exit }'
2
3
4
5
6
7
8
9
これはStéphane Chazelasの答えと似ていますが、awk
;で実装されたスクリプトはstart
行数を読み取った後に入力行の出力を開始します。行番号でend
スクリプトが終了します。
x
どちらの選択肢も、lineの前の行から始まり、lineの後の行で終わる入力データの一部を表示しますz
。y
z