다음과 같은 행이 많이 있습니다.
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
$2
uid
(이 줄은 파일에 다른 줄이 있는 경우 유용합니다.)
다른 방법:
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