簡體   English   中英

在這種情況下如何使用Awk

[英]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新的$1alen到的長度a ,當我們處理了一個失蹤的范圍(當a是相同的i - 1 )增加一個,所以我們不重復這個數字(這個句柄連續的情況下,線像335339350 ,而無需復制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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM