Awk

awk 匹配最後一條 記錄並列印

  • September 5, 2020

我得到了這個記錄fileinp

1 ABCDEFGHILM                12345678901234567   ABCD   X
1 CDEFGHILMNO                34567890123456789   BCDE   Y
1 EFGHILMNOPQ                56789012345678901   CDEF   Z
1 GHILMNOPQRS                78901234567890123   DEFG   W

當最後一個字元是 Y 或 Z 時,我想從 char 14 列印到 char 47,並附加匹配的最後一個字元。

預期結果為fileout

       34567890123456789Y
       56789012345678901Z

我嘗試了很多程式碼,但都失敗了,

gawk "{print /Y/ substr($1,14,33, length($1)-0)}" fileinp > fileout 

請問你能幫幫我嗎?

實際上,這是一個完整的記錄,這就是我搜尋最後一個字元的原因

1 QWERTYUIOPASDFGHJK         ZXCVBNMLKJHGFDSAP   1234        12345678 12345ABCDEFGHIL12                                                                                                    202000Y

對於您提供的範例輸入,其中最後一個欄位是 1 個字元:

$ awk '$NF~/[YZ]/{print substr($0,14,33) $NF}' file
               34567890123456789Y
               56789012345678901Z

對於您之後提供的真實數據行,其中最後一個欄位是多個字元,並且不假設 Y 或 Z 可能存在於最後一個欄位中的位置:

$ awk 'match($0,/[YZ][^[:space:]]*$/){print substr($0,14,33) substr($0,RSTART,1)}' file
               34567890123456789Y
               56789012345678901Z

或者如果 Y 或 Z 始終是該行中的最後一個字元:

$ awk '/[YZ]$/{print substr($0,14,33) substr($0,length($0))}' file
               34567890123456789Y
               56789012345678901Z

引用自:https://unix.stackexchange.com/questions/606985