[英]How to use Awk in this situation
如何更改此文件
335
339
666665
666668
為了這個結果
335
336
337
338
339
666665
666666
666667
666668
解釋:在兩個長相同的數字之間,它將把錯過的數字按數字升序排列。非常感謝
我相信這是您想要的。
awk 'alen==length($1) {for (i=a;i<=$1;i++) print i}; {a=$1; alen=length(a); if (a==(i-1)) {a++}}'
當alen
(a的長度)與a
和$1
之間當前行循環的長度相同時,將打印出所有缺失值。
然后設置a
新的$1
, alen
到的長度a
,當我們處理了一個失蹤的范圍(當a
是相同的i - 1
)增加一個,所以我們不重復這個數字(這個句柄連續的情況下,線像335
, 339
, 350
,而無需復制339
)。
歸功於@fedorqui的基本思想。
編輯:我相信這可以解決我在評論中指出的問題(我認為這也是@JohnB指出的問題):
awk '{f=0; if (alen==length($1)) {for (i=a;i<=$1;i++) print i} else {f=1}} {a=$1; alen=length(a)} a==(i-1){a++} f{print; a++}'
我覺得應該有一種更簡單的方法來做到這一點,但目前還看不到。
再次編輯:我最終測試的輸入文件為:
335
339
340
345
3412
34125
666665
666668
第一種方法是這樣的:
$ awk 'NR%2 {a=$1; next} $1>a {for (i=a;i<=$1;i++) print i}' file
335
336
337
338
339
666665
666666
666667
666668
可以改善您在問題中投入的信息和精力:)
NR%2 {a=$1; next}
NR%2 {a=$1; next}
作為NR
代表n
的棕土r
的eCord(線在這種情況下數), NR%2
是1,如果NR沒有倍數2。所以這個存儲在變量中的線的值a
在奇數行。 然后, next
停止處理當前行。 $1>a {for (i=a;i<=$1;i++) print i}
在其他情況下(偶數行),如果該值大於存儲的值,則從該值循環到當前值一,打印之間的所有值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.