# 리눅스 쉘 스크립트 username과 uid 출력방법
---
/etc/passwd 에 있는 유저의 정보를 출력하고 싶습니다.
그 내용중에 uid 가 500이상인 유저의 `uid`와 `username`, 이 2항목만 출력하고 싶습니다. ㅠㅠ
sehongpark님의 답변
## 답변
도움 드릴 수 있는 한도 내에서 답변드릴 수 있습니다!
PS
---
이것은 답변을 할 수도, 하지 않을 수도 있다는 마법같은 매직!
sehongpark님의 답변
## 추가 답변
```
awk -F: '{if ($3 >= 500) { print $1 ":" $3 } }' /etc/passwd
```
## 참고자료
---
1. https://goo.gl/aALuhw
jes000182님의 답변
정말 너무 너무 감사드립니다 ㅠㅠ
근데 제가
```
#!/bin/bash
printf "UID\tUSERNAME\tHOME-DIRECTORY\n"
awk -F: '{if ($3 >= 1000) { print $3 $1 $6 } }' /etc/passwd
```
위에 printf의 \t 이런식으로 지정을해서 $3 $1 $6 사이사이에 맞게 ":" 가 아닌 tab으로 항목을 구분하고 싶은데요
방법이 없을까요? ㅠㅠ
그리고 실행 결과는 이것인데
```
UID USERNAME HOME-DIRECTORY
65534nfsnobody/var/lib/nfs
1000ccuser/home/ccuser
100118cc0220/home/18cc0220
1002kaka/home/kaka
1003bestuser/home/bestuser
1004test/home/test
```
왜 UID가 65534인게 출력될까요??
sehongpark님의 답변
## UID 조건
if문 조건식을 변경하여, 원하는 범위의 사용자만을 골라보세요.
```
// 500이상 1010미만 사용자 출력
awk -F: '{if ($3 >= 500 && $3 < 1010) { print $1 ":" $3 } }' /etc/passwd
```
## tab으로 구분
print 부분에 탭을 넣어주세요.
```
// 구분자를 tab으로
awk -F: '{if ($3 >= 500 && $3 < 1010) { print $1 "\t" $3 } }' /etc/passwd
```
jes000182님의 답변
너무 감사합니다 그리고 탭으로 구분해봤는데 ㅠ
```
#!/bin/bash
printf "UID\tUSERNAME\t\tHOME-DIRECTORY\n"
awk -F: '{if ($3 >= 1000 && $3 < 2000) {print $3 "\t" $1 "\t\t\t" $6} }' /etc/passwd
```
근데 출력결과가
```
UID USERNAME HOME-DIRECTORY
1000 ccuser /home/ccuser
1001 18cc0220 /home/18cc0220
1002 kaka /home/kaka
1003 bestuser /home/bestuser
1004 test /home/test
```
마지막 HOME-DIRECTORY 항목이 너무 제각각 예쁘게 정렬되지가 않네요 ㅠㅠ
\t 으로 아무리 여유분을 주어도 이쁘게 나오지 않는데 방법이 없을까요??
sehongpark님의 답변
## printf를 통한 형식 출력
코드 예
```
#!/bin/bash
printf "%5s\t%-12s\t%-16s\n" "UID" "USERNAME" "HOME-DIRECTORY"
awk -F: '{if ($3 >= 1000 && $3 < 2000) { printf "%5d\t%-12s\t%-16s\n", $3, $1, $6} }' /etc/passwd
```
실행 결과
```
UID USERNAME HOME-DIRECTORY
1000 username /home/username
1001 domjudge-run /nonexistent
```
## 참고자료
---
1. https://goo.gl/93mCem
jes000182님의 답변
진짜 미쳤네요 정말 감사드립니다 ㅠ
sehongpark님의 답변
좋은 주말되세요 :D