UNIX 시스템

cut - 10주차 수업 - 1

세인트킴 2023. 5. 29. 22:50

cut

파일의 각 줄에서 특정 섹션을 잘라내서 출력하는 기능이다.

더보기

cut -b LIST [파일명] byte단위로 자를 수 있다.

cut -c LIST [파일명] charactor단위로 자를 수 있다.

cut -f LIST [-d 구분자] [-s] [파일명] fileld, 구분자로 구별되어 있는 항목

  • -b LIST LIST에 지정된 바이트를 잘라서 출력
  • -c LIST LIST에 지정된 문자를 잘라서 출력
  • -f LIST LIST에 지정된 필드를 잘라서 출력
  • -d 구분자(delimiter)지정
  • -s 구분자가 없는 행은 통과 

tr

입력 데이터에서 특정 문자들을 교체 또는 제거하는 변환

tr SET1 SET2
SET1 문자집합에서 SET2 문자집합으로 변환
$ echo "b is a cd" | tr 'abcd' 'jkmn'
k is j mn
tr -s SET1
반복되는 문자를 한 개의 문자로 압축
$ echo "bb is a bbb" | tr -s 'b'
b is a b
tr -d SET1
문자 제거
$ echo "bkk is a kb" | tr -d 'k'
b is a b

sed(stream editor)

sed [option] {script} [FILE] 

입력 스트림에 대한 텍스트 변환

%cat testfile
abc 123
kkk 777
abc 123
% sed '2d' testfile
abc 123
abc 123
% sed 's/bc/BC/' testfile
aBC 123
kkk 777
aBC 123

pr  

paginating, 파일을 페이지 단위로 인쇄할 수 있게 출력

파일 비교

  • cmp - 두 개의 파일을 바이트 단위로 비교
  • diff - 파일을 줄 단위로 비교
  • comm - 두 개의 정렬된 파일을 줄 단위로 비교

paste

파일 병합(컬럼으로)


실습1

더보기

cslinux2 사용자(계정) 중에서 다음 정보를 추출하여 출력하기 위한 명령을 구성하시오.(/etc/passwd 파일 활용)

1. 전체 사용자의 로그인 id

cat /etc/passwd | cut -f1 -d:

 

2. 23학번 학생의 로그인 id

cat /etc/passwd | grep '^2023' | cut -f1 -d:


3. 23학번 학생의 uid

cat /etc/passwd | grep '^2023' | cut -f3 -d:


로그인되어 있는 사용자 목록(who 출력)에서 로그인id 부분만 추출하여 출력하시오.

who | cut -f1 -d' '

실습2

더보기

sam 파일 내용 출력 

cat sam

Apple+Banana*mango

Cherry    strawberry --blueberry 


1. +와*문자를 각각(와)로 변환하여 출력

cat sam | tr '+ *' '( )'

Apple(Banana)mango

Cherry    strawberry --blueberry 


2. - 문자를 제거하여 출력

cat sam | tr -d '-'

Apple+Banana*mango

Cherry    strawberry blueberry 


3. 여러 개의 공백이 연달아 있는 경우 한 개의 공백으로 합친 후 출력

cat sam | tr -s ' '

Apple+Banana*mango

Cherry strawberry --blueberry 

 

who 출력에 대해 다음 사항 출력(tr, cut 함께 사용)

1. 로그인 날짜와 시각만 출력

who |  tr -s ' ' | cut -f3,4 -d' ' | tr'-' '/'

 

2. 1번 출력에서 날짜의 -를 /로 변경하여 출력

who | tr -s ' ' | cut -f3,4 -d' '| tr '-' '/'

실습3

더보기

sam 파일 출력

cat sam

appLE 35

banana 1

mango 21

appLE 5

mango 15

appLE 18

 

1. appLE을 모두 apple로 치환하여 출력

cat sam | sed 's/LE/le/'

apple 35

banana 1

mango 21

apple 5

mango 15

apple 18

 

who 출력에 대해 다음 사항 출력

1. 자신의 로그인 id를 문자열 'ME'로 바꾸어 출력

 who | grep -w '202121165' | sed 's/202121165/ME/'

ME pts/597      2023-05-29 21:17 (112.148.136.34)

 

2. 로그인 시각을 모두 *:*로 바꾸어 출력(정규표현식 활용)

who | sed 's/[0-9]*\:[0-9]*/*:*/'

jhkim    pts/303      2023-03-25 *:* (tmux(615069).%0)

202312345 pts/586      2023-05-23 *:* (tmux(3589159).%0)

202321027 pts/596      2023-05-29 *:* (210.222.216.228)

202121165 pts/597      2023-05-29 *:* (112.148.136.34)

202320965 pts/598      2023-05-29 *:* (211.183.234.36)

202320998 pts/600      2023-05-29 *:* (112.216.247.247)

201920868 pts/644      2023-05-29 *:* (125.241.164.18)

202312345 pts/647      2023-05-24 *:* (218.151.110.25)

nobody   pts/290      2023-05-29 *:* (222.116.135.162)

 

3. ip주소를 모두 *.*.*.*로 바꾸어 출력(정규표현식 활용)

who | sed 's/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/*.*.*.*/'

202321027 pts/596      2023-05-29 23:56 (*.*.*.*)

202121165 pts/597      2023-05-29 21:17 (*.*.*.*)

202320965 pts/598      2023-05-29 23:44 (*.*.*.*)

202320998 pts/600      2023-05-29 19:29 (*.*.*.*)

201920868 pts/644      2023-05-29 21:31 (*.*.*.*)

202312345 pts/647      2023-05-24 11:29 (*.*.*.*)

nobody   pts/290      2023-05-29 14:02 (*.*.*.*)

실습4

더보기

sam1 , sam2 파일 출력

apple

banana

cherry

mango

strawberry

banana

chery

mango

strawberry

blueberry

 

1. diff 명령을 통해 두 개의 파일의 차이 출력

diff sam1 sam2

1d0

< apple // sam1의 1번째 행이 sam2의 0번째 행과 다르다. sam1에만 apple가 있다.

3c2

< cherry // sam1의 3번째 행이 sam2의 2번째 행과 다르다. sam1 cherry -> sam2 chery로 되어있다.

---

> chery

5a5

> blueberry // sam1의 5번째 행이 sam2의 5번째 행과 다르다. sam1 strawberry -> blueberry로 되어있다.

 

2. paste명령을 이용해 두 개의 파일을 병합한 후 출력

apple banana

banana chery

cherry mango

mango strawberry

strawberry blueberry

 

last명령 출력에 대해 다음 사항 수행

1. last 명령 수행 결과를 파일 aa로 저장, 잠시 후 다시 last 명령 수행 결과를 파일 bb로 저장한 후 두 개의 파일 차이를 비교

last > aa; last > bb ; diff aa bb

아무런 출력이 없는데 aa와  bb 파일이 동일하다는 뜻이다. ls -l로 해도 179934로 파일이 동일하다.

 

2. 로그인 id를 모두 잘라내어 loginid라는 이름의 파일로 저장

last | cut -f1 -d ' ' > loginid

 

3. 요일 부분을 잘라내어 wday라는 이름의 파일로 저장

last | tr -s ' ' | cut -f4 -d ' ' > wday

 

4. loginid과 wday파일을 병합하여 출력

paste loginid wday | head

20212116 Tue

20232102 Mon

20232096 Mon

20232099 Mon

20232101 Mon

20232099 Mon

20212120 Mon

20232096 Mon

20232098 Mon

20232099 Mon