
を使用して、行の先頭に入力行の4番目のフィールド()も印刷してみawk
ました。$4
次のコードを試しましたが、文字列が印刷されます。以上銀行:
awk -F"[--]" '{print $4 ;print$0}' file
文字列はランダムなので、文字列名は使用できません。
入力は次のとおりです。
/example-origin-live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
上記のコードを使用すると、次のような結果が得られます。
320
/example-origin-live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
次の出力が必要です。
320/example-origin-live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
助けてくれてありがとう!
答え1
デフォルトでは、個々の印刷ステートメントは個々のレコード(行)を印刷します。 Single print
、Join、$4
および以下を使用してください$0
。
% awk -F- '{print $4 $0}' input
320/example-origin-live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
答え2
行の先頭にあるダッシュの一部が消えた場合、各行の前にフィールド番号を付けて追加する文字列を選択するのは困難です。たとえば、常にフィールド4ではない可能性があるためです。
$ cat file
/example-origin-live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
/example.origin-live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
/example.origin.live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
代わりに、次のコードは各行で2番目に-
区切られた単語を選択します:
。
$ sed 's/^\([^:]*:[^-]*-\([^-]*\)\)/\2\1/' file
320/example-origin-live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
320/example.origin-live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
320/example.origin.live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
またはおそらくもっと読みやすいですawk
。
$ awk -F ':' '{ split($2,a,"-"); print a[2] $0 }' file
320/example-origin-live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
320/example.origin-live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
320/example.origin.live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
行が基本的に2つの区切りフィールドであると仮定し、:
そこから2番目のフィールドを分割し-
、結果フィールドの2番目のフィールドを使用して出力します。
各行の終了ビットに静的形式がある場合は、明らかに開始ではなく終了からフィールド数を計算し、awk
次のように使用できます。
$ awk -F '-' '{ print $(NF - 5) $0 }' file
320/example-origin-live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
320/example.origin-live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9
320/example.origin.live/ngrp:tennis-320-fd1d9b92-69e2-446c-a3e6-45b33a55efc9