awkを使用して2行の間の内容を取得します。

awkを使用して2行の間の内容を取得します。

質問1:

awk次のように、2つの異なるキーワード間の行を取得するために使用できます。

$cat test1.sh
#!/bin/bash
awk '/1/,/5/{print}' file.txt

$ cat file.txt 
0
1
2
3
4
5
6
7
8
1
q

出力は次のとおりです

$ sh -x test1.sh 
+ awk '/1/,/5/{print}' file.txt
1
2
3
4
5
1
q

「1 2 3 4 5」のみどうやって入手できますか?使用しないでくださいgrep -Bgrep -Ased

質問2:2つの同じキーワード「1」の間で「1 2 3 4 5 6 7 8 1」を取得するには?とを使用しないでくださいgrep -Bgrep -Ased

答え1

エクスポートを使用できます。

$ awk '/1/,/5/{print}$0==5{exit}' file.txt

$ awk '$1==1{a++}a>=2{print;exit}a{print}' file.txt
1
2
3
4
5
6
7
8
1

$1==1{a++} --> 最初のフィールド値が 1 の場合、変数 a の値を増やします。

a> = 2 {print; exit} --> a値が2以上の場合は、現在の行を印刷して終了します(ファイルを処理しなくなりました)。

a{print} --> aの値が0でない場合は、次の行を印刷します。

答え2

sed作業に適したツールです。なぜ使うべきではないのか分からない。これが宿題であれば、先生に文句を言うことを検討してください。

$ sed -n -e '/^1/,/^5/p' -e '/^5/q' file.txt
1
2
3
4
5

このコマンドは、sed()と一致する行pの間のすべての行を印刷します。また、一致する行が見つかると終了()されます。デフォルトの出力はオフ()です。/^1//^5/q/^5/-n

$ sed -n '/^[1-9]/p' file.txt
1
2
3
4
5
6
7
8
1

関連情報