Awk
awk 匹配最後一條 記錄並列印
我得到了這個記錄
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