我有一個正則表達式的例子:AWK-字符串表達式
seq 20 | awk 'NR!~/^2$|^12$|^15$/'
相同,但與鏈表達:
seq 20 | awk 'NR != "2" && NR != "12" && NR != "15"'
是否可以寫短字符串表達式?
seq 20 | awk 'NR != "2" | "12" | "15" '
謝謝你的解釋。
我有一個正則表達式的例子:AWK-字符串表達式
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
如果你有某種圖案線條你試圖忽略,考慮在BEGIN
塊使用for
循環:
seq 20 | awk 'BEGIN { for (i=1; i<=15; i++) array[i]++ } !(NR in array)'
16
17
18
19
20
我認爲OP希望該行數不與2結尾的所有行,12,15,好了,以次20威力是個壞榜樣。嘗試seq 200或seq 1000.你的第一個解決方案將打印102行嗎? – Kent
@Kent:我想他只是想找一個較短的表達。我不認爲他在試圖找到不以2,12或15結尾的行。重新閱讀這個問題可能是值得的:-) – Steve
@steve,謝謝你的一個很好的例子。 – Tedee12345