質問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 -B
。grep -A
sed
質問2:2つの同じキーワード「1」の間で「1 2 3 4 5 6 7 8 1」を取得するには?とを使用しないでくださいgrep -B
。grep -A
sed
ベストアンサー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でない場合は、次の行を印刷します。