Linux
如何用任何兩個數字匹配或第一個數字比第二個數字小一個的字元串?
我有一個包含四列的製表符分隔文件。我想在第 1 列中查找具有特定模式的行,其中顯示 apple M of N。我只想提取第一個數字與第二個數字匹配的行,或者第一個數字小於第二個數字的行。在下面的範例中,第 2、3 和 5 行(不包括標題行)是符合模式的行。
Col1 col2 col3 col4 apple (XY_012345, apple 6 of 10) 1 12228 12612 apple (XY_678901, apple 5 of 6) 1 12722 13220 apple (XY_234567, apple 2 of 2) 1 18437 24737 apple (XY_890123, apple 8 of 30) 1 24892 29269 apple (XY_456789, apple 12 of 12) 1 35175 35276
GNU awk 中的類似內容:
$ gawk 'match($0, /([0-9]+) of ([0-9]+)/, a) && (a[2] == a[1] || a[2] == a[1]+1)' file apple (XY_678901, apple 5 of 6) 1 12722 13220 apple (XY_234567, apple 2 of 2) 1 18437 24737 apple (XY_456789, apple 12 of 12) 1 35175 35276
perl -ne 'print if /(\d+) of (\d+)/ && ($1 == $2 or $1 == ($2 - 1))' < input
這是一個“單線” perl 腳本,它循環遍歷您給它的輸入並僅在以下情況下列印行:
- 在匹配並擷取由文本“”分隔的兩位數字之後
of
,- 第一個數字等於第二個數字或比第二個數字小一