awk 스크립트는 파일에서 특정 단어를 검색하고 출력을 생성합니다.

awk 스크립트는 파일에서 특정 단어를 검색하고 출력을 생성합니다.

다음과 같은 행이 많이 있습니다.

uid: jdoes mail:  [email protected]
mail:  [email protected] uid: mdoes
uid: kdoes mail:  [email protected]
mail:  [email protected] uid: tdoes

다음과 같이 재정렬하려면 어떻게 해야 합니까?

uid: jdoes mail:  [email protected]
uid: mdoes mail:  [email protected]
uid: kdoes mail:  [email protected]
uid: tdoes mail:  [email protected]

답변1

핵심적으로 AWK는 무언가와 일치하는 라인에서 특정 작업을 수행합니다. 두 가지 유형의 선이 있으므로 각 유형이 일치하고 다르게 인쇄됩니다. 한 가지 방법은 다음과 같습니다.

awk '/^uid/ { print } /^mail/ { print $3" "$4" "$1"  "$2 }' <your files>

작동 방식:

  • 이 문자로 시작하는 줄은 uid나타나는 대로 인쇄하세요.
  • 해당 열로 시작하는 행에 대해 열을 다르게 배열합니다( mail행에 있으므로 및 사이에 추가 공간이 있음을 참고하세요).$1$2uid

(이 줄은 파일에 다른 줄이 있는 경우 유용합니다.)


다른 방법:

awk '/^mail/{$0=$3" "$4" "$1" "$2};1' <your files>

작동 방식:

  • print기본적으로 $0(전체 라인) 인쇄;
  • ;1;; { print }
  • 우리는 $0라인 매칭을 변경합니다 ^mail.

(처리하고 인쇄하려는 경우 이 방법이 더 빠를 수 있습니다.파일의 모든 라인. 돈 크리스티에게 감사드립니다. )

답변2

작업을 쉽게 완료할 수 있습니다.sed

sed 's/^\(mail:\s*\S*\)\s*\(.*\)/\2 \1/' file.lines

POSIX가 되려면 and 또는 \s로 변경해야 합니다.[[:blank:]]\S[^[:blank:]]

sed 's/^\(mail:[^:]*\)[[:blank:]]\(.*\)/\2 \1/' file.lines

관련 정보