1

正規表現の例があります:

seq 20 | awk 'NR!~/^2$|^12$|^15$/'

同じですが、チェーン式を使用します。

seq 20 | awk 'NR != "2" && NR != "12" && NR != "15"'

より短い文字列式を書くことは可能ですか?

seq 20 | awk 'NR != "2" | "12" | "15" '

ご説明ありがとうございます。

4

2 に答える 2

2

私の知る限りではありません。そして、あなたが示唆したように、この方法で等値テスト (この場合は不等値テスト) を実行したい場合は、正規表現を使用する必要があります。

無視する値が複数ある場合は、BEGINブロックで配列を使用することを検討してください。これにより、各行を反復する!(NR in array)ときに式が短くなります (つまり、式は単純に :になります)。awk

seq 20 | awk 'BEGIN { array[2]++; array[12]++; array[15]++ } !(NR in array)'

結果:

1
3
4
5
6
7
8
9
10
11
13
14
16
17
18
19
20

無視しようとしている行に何らかのパターンがある場合は、ブロックでforループを使用することを検討してください。BEGIN

seq 20 | awk 'BEGIN { for (i=1; i<=15; i++) array[i]++ } !(NR in array)'

16
17
18
19
20
于 2012-10-13T08:50:50.977 に答える
1

最初のものはおそらく最短です。アンカーをグループの外に置いた場合は短くなります()

seq 20 | awk 'NR !~ /^(2|12|15)$/'
于 2012-10-15T04:31:35.080 に答える