awkを使用して行の特定のフィールドの前に追加

awkを使用して行の特定のフィールドの前に追加

を使用して、行の先頭に入力行の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

関連情報