私が得た記録は次のとおりですfileinp
。
1 ABCDEFGHILM 12345678901234567 ABCD X
1 CDEFGHILMNO 34567890123456789 BCDE Y
1 EFGHILMNOPQ 56789012345678901 CDEF Z
1 GHILMNOPQRS 78901234567890123 DEFG W
最後の文字がYまたはZの場合は、文字14から文字47まで印刷し、最後の一致文字を追加したいと思います。
予想される結果は次のとおりですfileout
。
34567890123456789Y
56789012345678901Z
複数のコードを試しましたが、すべて失敗しました。
gawk "{print /Y/ substr($1,14,33, length($1)-0)}" fileinp > fileout
私を助けてくれますか?
実は完全な記録だから最後の文字を検索してみるから
1 QWERTYUIOPASDFGHJK ZXCVBNMLKJHGFDSAP 1234 12345678 12345ABCDEFGHIL12 202000Y
答え1
入力した入力例の場合、最後のフィールドは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
答え2
これはほぼ正確ですが、新しいレコードの後にYまたはZがありません。
gawk "$NF~/Y|Z/{print substr($0,14,33)}" fileinp > fileout
結果:
34567890123456789
56789012345678901
予想される結果:
34567890123456789Y
56789012345678901Z
答え3
私はこれを試みます:
gawk "$NF~/Y|Z/{print substr($0,14,33) substr($0,194,1)}" fileinp > fileout
ただし、最後の文字の前に空白文字が表示されます。
34567890123456789 Y
56789012345678901 Z
私もこれを試してみましたが、実際に最後の文字ではありません。
gawk "$NF~/Y|Z/{print substr($0,14,33) substr($NF,7,1)}" fileinp > fileout
34567890123456789Y
56789012345678901Z