sort 및 cut 명령을 통과한 출력을 반전시키는 방법

sort 및 cut 명령을 통과한 출력을 반전시키는 방법

사용자가 입력한 UID를 가져온 다음 이를 사용하여 /etc/passwd 디렉토리를 참조하고 데이터를 이름별로 정렬하고 사용자 이름, 이름, 성만 순서대로 표시해야 합니다. 내가 겪고있는 문제는 출력을 정렬하는 것입니다. 다음과 같은 명령을 사용하면

cat /etc/passwd |grep  $id_prefix | sort | cut -d: -f1,5

출력은 사용자 이름을 기준으로 정렬되고 성, 이름 순서로 표시됩니다. 명령을 이와 같이 변경할 수 있다는 것을 알고 있습니다.

cat /etc/passwd |grep  $id_prefix | sort | cut -d: -f5 | sed 's/\([^ ]*\)[ ][ ]*\([^ ]*\)/\2 \1/'

그런 다음 출력을 정렬하고 원하는 대로 잘라내겠습니다. 하지만 FIELD1(사용자 이름)은 포함되지 않습니다. 필요한 모든 필드를 올바르게 표시하고 정렬하려면 어떻게 작성해야 합니까?

답변1

다음을 수행할 수 있습니다.

awk -F: '{ print $1"   "$5 }' /etc/passwd | sort -k2

/etc/passwd그러면 두 번째 필드의 사용자 이름 및 설명 필드가 구문 분석됩니다. 이 필드는 sort이름과 성 순서로 나열되어 있는 경우 사용자의 이름이 됩니다.

다음은 병합의 예입니다 grep.

grep "500\|501\|502" /etc/passwd | awk -F: '{ print $1"    "$5 }' | sort -k2

jira    Atlassian JIRA
dick    Richard Jameson
bob    Robert Gillespie

편집하다:

파일에서 이름과 성의 순서를 바꾸려면 다음을 사용하십시오 /etc/passwd.

awk -F: '{ print $1"   "$5 }' /etc/passwd | awk '{ print $1"    "$3" "$2 }' | sort -k2

위의 예에서는 /etc/passwd파일의 이름과 성을 수정합니다.

grep "500\|501\|502" /etc/passwd | awk -F: '{ print $1"    "$5 }' |  awk '{ print $1"    "$3" "$2 }' | sort -k2

이는 이름/성, 성/이름을 구분하는 쉼표가 없고 없어도 되는 경우에 작동합니다.

편집 (두 번째):

성/이름은 쉼표로 구분되므로 다음과 같이 작동합니다.

awk -F: /$id_prefix/'{ print $1"    "$5 }' /etc/passwd | awk -F, '{ print $1"    "$2 }' | awk '{ print $1"    "$3"    "$2 }' | sort -k2

grep에서 파이핑 하지 말 것을 제안한 @Jidder에게 감사드립니다 awk.

답변2

당신은 이것을 해야 합니다:

grep mohsen /etc/passwd | awk -F':' {'split($5,a,",");printf "username is :%s ,uid is: %s , name is %s \n",$1,$3,a[1]  '}

출력은 다음과 같습니다

username is :mohsen ,uid is: 1000 , name is Mohsen Pahlevanzadeh

답변3

나는 당신이 다음과 같이 벗어날 수 있다고 생각합니다 :

grep $id_prefix /etc/passwd | cut --delimiter: --fields=1,5 | sort --field-separator=: --key=2

상황에 따라 필요한 경우 --ignore-case옵션을 추가할 수도 있습니다. sort확인하다문서더 많은 선택을 위해.

답변4

사람들이 왜 grep을 awk로 가져오는지 잘 모르겠습니다.
awk를 사용하면 이 모든 작업을 수행할 수 있습니다. 이는 성과 이름이 공백으로 구분되어 있다고 가정합니다.
여기서 USERNAME은 검색어입니다.

awk -F: '/USERNAME/{split($5,a," ");print $1,a[2],a[1]}' etc/passwd

관련 정보