印刷方法そして前の行後ろに並ぶ3行目

印刷方法そして前の行後ろに並ぶ3行目

質問ここパターンマッチングの前後に数行の入力が必要です。

しかし、ここでの目標は行番号を取得し、ファイルから行番号の前後のいくつかの行を取得することです。

たとえば、

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の後の行で終わる入力データの一部を表示しますzyz

おすすめ記事