를 사용하여 줄 시작 부분에 입력 줄의 네 번째 필드( )도 인쇄해 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
대신 다음 코드는 각 줄에서 두 번째로 -
구분된 단어를 선택합니다 :
.
$ 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
행이 기본적으로 두 개의 구분된 필드라고 가정하고 :
거기에서 두 번째 필드를 분할 -
하고 결과 필드의 두 번째 필드를 사용하여 출력합니다.
각 줄의 끝 비트에 대한 정적 형식이 있는 경우 분명히 시작 대신 끝에서부터 필드 수를 계산하고 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