正規表現の例があります:
seq 20 | awk 'NR!~/^2$|^12$|^15$/'
同じですが、チェーン式を使用します。
seq 20 | awk 'NR != "2" && NR != "12" && NR != "15"'
より短い文字列式を書くことは可能ですか?
seq 20 | awk 'NR != "2" | "12" | "15" '
ご説明ありがとうございます。
正規表現の例があります:
seq 20 | awk 'NR!~/^2$|^12$|^15$/'
同じですが、チェーン式を使用します。
seq 20 | awk 'NR != "2" && NR != "12" && NR != "15"'
より短い文字列式を書くことは可能ですか?
seq 20 | awk 'NR != "2" | "12" | "15" '
ご説明ありがとうございます。
私の知る限りではありません。そして、あなたが示唆したように、この方法で等値テスト (この場合は不等値テスト) を実行したい場合は、正規表現を使用する必要があります。
無視する値が複数ある場合は、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
最初のものはおそらく最短です。アンカーをグループの外に置いた場合は短くなります()
。
seq 20 | awk 'NR !~ /^(2|12|15)$/'