728x90

풀이 과정 

 

이 문제의 핵심은 순서가 없고 데이터 중복이 허용이안되는 자바의 컬렉션 프레임워크의 "Set"이 핵심인거 같다.

 

우선 HashSet을 만든다음 2중 반복문 형태에서 

 

서로 다른 인덱스에 있는 두개의 수를 뽑아야했으므로 i를 제외한 나머지 j 반복자를 더한 값을

HashSet에 담았고

Set을 ArrayList에 담아 Collections.sort() 메서드를 통해 오름차순으로 정렬한뒤

 

다시 ArrayList를 Answer(정수형 배열) 에 담았는데 한번에 통과하였다.

 

 

 

 

 

풀이 코드

 

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        //배열의 임의 두수를 더해서 담을 정수 addnumber
        int addnumber = 0;
        
        
Set<Integer> setnumber = new HashSet<>();

for (int i = 0; i < numbers.length; i++) {
for (int j = 0; j < numbers.length; j++) {
if (i == j) {

} else {
addnumber = numbers[i] + numbers[j];

setnumber.add(addnumber);
}
}
}
        
        
  List<Integer> arraylist = new ArrayList<Integer>(setnumber);

  
  
  Collections.sort(arraylist);


  int[] answer = new int[arraylist.size()];
  int size=0;
  for(int temp : arraylist) {
  answer[size++] = temp;
  }
  
  for(int i=0; i<answer.length; i++) {
  System.out.println(answer[i]);
  }
 
        
        
        
        return answer;
    }
}

728x90

'알고리즘' 카테고리의 다른 글

[프로그래머스] Java 문자열 내림차순 배치하기  (0) 2022.05.31
[프로그래머스] 체육복  (0) 2022.02.08
728x90

https://jmeter.apache.org/download_jmeter.cgi

 

Apache JMeter - Download Apache JMeter

Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava

jmeter.apache.org

ㄴ Jmeter 다운로드 링크 (현재 최신버전은 5.4.3 이고 Java 8 버전이 설치되어있어야한다고함.)

2022년 2월 10일 기준

 

jmeter를 실행하는 방법 

ㄴ bin 폴더 밑에있는 jmter.bat 파일을 실행합니다.

2) 테스트

Test Plan -> (마우츠 우측버튼 클릭) 

[ADD] -> [Threads (Users)] -> [Thread Group] 선택

 

[Thread Group - Thread Properties 설정]

 Nmuber of Thread (users) : 테스트를 하는 사람 (하나의 웹사이트가 잇다고할때 10명의 사용자가 있다고 가정하고 테스트를 한다고 보면됨)

 

Loop Count : 1개의 PC를 가지고 있는 Tester 가 해당 테스트시나리오를 몇번 반복하게 할 것인가?

 

Ramp-up period : 1000명의 테스터가 10000번씩 웹 접속테스트를 한다면 과부하가 걸릴것이다.

동시 접속자수를 서서히 늘려갈때 쓰는 옵션이다. 값을 5로 설정시 5초안에 user(쓰레드 수)를 점진적으로 늘린다.

 

---- 

[Thread Group] -> [Add] -> [Sampler] -> Http Request]

 

ServerName : www.google.com  입력

 

Report 추가

간단한 테스트를 통해 동작을 확인할수 있음

728x90

'Java > jmeter' 카테고리의 다른 글

Jmeter API Testing  (0) 2022.02.18
728x90

 

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
       

       // 체육복을 하나 더 가져왔는데 누가 훔쳐간애 처리
        for(int i=0; i< reserve.length; i++) {
    
                for(int j=0; j< lost.length; j++)
                    if(reserve[i] == lost[j]) {
                        reserve[i] = 0;
                    }
        }
         


        int ok_give = 0; //체육복을 빌려줄수있는 학생 수
        int duplicate = 0; // 중복 처리
        
        // 잃어버린 학생의 수
        int lost_length = lost.length;
        
        // 여벌 체육복이 있는 학생의 수
        int reserve_length = reserve.length;

        for(int i=0; i<reserve.length; i++) {
            duplicate=0;
            int reserve_plus = reserve[i]+1;
            int reserve_minus = reserve[i]-1;
                    
            for(int j=0; j<lost.length; j++){
                int lost_index = lost[j];
                
                if(lost_index == reserve_plus) {
                    ok_give++;
                    duplicate++;
                }
                
                if(lost_index == reserve_minus) {
                    ok_give++;
                    duplicate++;
                }
                
                if(duplicate == 2){
                    ok_give--;
                }
                
                }
        }
  
 int answer = 0;
 int ok = 0;
  if(lost.length < ok_give) {
      ok = ok_give - lost.length; 
      answer = n-lost.length+ok_give-ok;  

      // 전체 학생수 - 잃어버린 학생의 수 + 여벌의 체육복을 가져와서 빌려줄수있는 학생의 수 + 중복 제거
  }else{
      answer = n-lost.length+ok_give;

    // 전체 학생수 - 잃어버린 학생의 수 + 여벌의 체육복을 가져와서 빌려줄수있는 학생의 수
  }
            
        return answer;
    }
}

 

코드실행은 성공했으나

체점을 하니 65점이나왔다.

 

도중에 테스트케이스를 뭘 놓친건지.. 

 

 

테스트케이스를 추가해서 다시 풀어봐야겠다..

 

다른 사람의 풀이법

 

import java.util.Arrays;

class Solution {

public int solution(int n, int[] lost, int[] reserve) {

  int answer = n - lost.length; Arrays.sort(lost); Arrays.sort(reserve); // 여벌 체육복을 가져온 학생이 도난당한 경우        for(int i=0; i<lost.length; i++) {

    for(int j=0; j<reserve.length; j++) {

        if(lost[i] == reserve[j]){ answer++; lost[i] = -1; reserve[j] = -1; break;

         }

      }

}

 

// 도난당한 학생에게 체육복 빌려주는 경우

for(int i=0; i<lost.length; i++) {

   for(int j=0; j<reserve.length; j++) {

       if((lost[i]-1 == reserve[j]) || (lost[i]+1 == reserve[j])){ answer++; reserve[j] = -1; break;

       }

         }

           }

   return answer;

  } 

}

 

728x90
728x90

sed 명령어는 찾은 문자열을 바꿀수 있는 명령어이다.

 

[sed 스크립트]

 

sed 스크립트는 어떤 범위의 어떤 문자열이 포함된 라인을 추출하던지

특정 문자열을 원하는 다른 문자열로 변경할 것인지를 명시하는일입니다.

 

여기서 어떤 범위는 어드레스 address 에 해당하며,

특정 문자열을 추출하거나 변경하는 일 명령어 command 라고합니다.

 

어드레스는 옵션처럼 생략될 수도 있으며,

어드레스가 생략되면 sed는 대상 파일 전체에서 특정 문자열을 찾고 변경합니다.

 

[어드레스]

 

어드레스는 대상 파일에서 어떤 범위에 해당합니다. 그리고,

어드레스가 정의되지 않았을 경우에는

대상 파일 전체에서 특정 문자열을 찾거나 명령어를 수행합니다.

 

어드레스는 특정 라인일수도 있고, 정규 표현식과 같은 패턴일수도 있습니다.

 

"특정 라인부터 특정 패턴이 포함된 라인까지이거나"

"특정 패턴이 포함된 라인부터 명시한 라인 수 까지" 일수도 있습니다.

 

다음은 이런 어드레스 종류를 정리한 것입니다.

옵션 설명
number 명시된 숫자에 해당하는 라인 번호일 경우 다음 명령어를 수행함
number~step 명시된 숫자는 해당하는 라인부터 명시한 단계만큼 해당 라인을 스킵한 다음
라인일 경우 다음 명령어를 수행함
$ 파일의 마지막 라인일 경우 다음 명령어를 수행함
/regexp/ 명시한 정규표현식과 일치하는 라인일 경우 다음 명령어를 수행함
\cregexpc 명시한 정규 표현식과 일치하는 라인일 경우 다음 명령어를 수행함
0,addr2 1번째 라인부터 addr2가 포함된 라인까지가 범위이며, addr2는 정규 표현식이여함
addr1,+N addr1이 포함된 라인부터 +N라인까지가 범위이며, addr1은 정규 표현식이여야 하며,
N은 숫자여야함
addr1,~N addr1이 포함된 라인을 기준으로 N라인까지가 범위이며, addr1은 정규 표현식이여야 하며,
N은 숫자여야함

# sed 테스트를 위한 샘플 파일 내용

cat hosts

 

# This is Sed Sample File
# We will test to replace from a-text to b-text.
# It was created by NaleeJang.

127.0.0.1   localhost

# Development
192.168.100.250 git.example.com
192.168.100.10  servera.example.com
192.168.100.11  dev.example.com

# Test

172.10.2.12 test1.example.com
172.10.2.13 test2.example.com

# Production
122.10.10.31 service.example.com
122.10.10.32 service1.example.com
122.10.10.33 service2.example.com

 

---------------------------------------------------------------------------------------------------------

옵션 -n : 대상 파일 내용을 출력하지않겠다.

숫자 5 : 대상 파일의 5번째 라인

p : print의 약자로 현재 어드레스에 의해 정의된 범위의 내용을 출력하라는 의미

 

# 5번째 줄을 출력함

sed -n '5 p' hosts

ㄴ 127.0.0.1 localhost

 

'1~3' : 1번째 라인부터 시작하여 3칸 라인을 건너뛰고 다음 라인을 읽으라는 뜻

= : 현재 읽어들인 라인의 라인 번호를 출력하라

# 1번째 라인부터 시작하여 3라인마다 해당 라인 번호 출력

sed -n '1~3 =' hosts

 

$ : 파일의 마지막 라인

'$ =' : 마지막 라인의 라인번호를 출력하라

'$ p' : 마지막 라인의 내용을 출력하라

 

# 파일의 마지막 라인 번호 출력

sed -n '$ =' hosts

 

# 파일의 마지막 라인 문자열 출력

sed -n '$ p' hosts

 

# test와 숫자로 시작하는 문자열이 포함된 라인 출력

sed -n '/test[0-9].*/ p' hosts

 

\cregexpc : 명시한 정규표현식과 일치하는 라인일 경우 다음 명령어를 수행

정규표현식을 \c ~ c 사이에 표현

sed -n '\ctest[0-9].*c p' hosts

 

어드레스 0,addr2 : 첫 번째 라인부터 addr2가 포함된 라인까지 대상범위가 됨

 

#1번째 라인부터 # Devel로 시작하는 문자열이 있는 라인까지 출력

sed -n '0,/^# Devel*/ p' hosts

 

# Devel로 시작하는 라인부터 아래 3줄까지 출력

sed -n '/^# Devel*/,+3 p' hosts

 

# Devel이 포함된 라인을 기준으로 3번째 라인까지 출력

sed -n '/^# Devel*/,~3 p' hosts

 

[ 명령어 ]

 

sed 명령어에는 어드레스를 필요로 하지 않거나,

숫자나 정규 표현식과 같은 단일 어드레스를 사용할 때 사용할 수 있는 명령어와

어드레스 범위를 허용하는 명령어들이 있습니다.

 

어드레스를 필요로 하지 않는 명령어는 라벨, 주석, 블록이 있으며,

단일 어드레스를 사용할 수 있는 명령어와 어드레스 범위를 허용하는

명령어에는 주로 문자열 추가, 삭제, 변경, 파일 저장과 같은 명령어들이 있습니다.

 

그럼 지금부터 sed와 함께 사용할 수 있는 다양한 명령어들을 알아보겠습니다.

 

0 or 1 어드레스 명령어( Zero- or One- address commands )

어드레스 범위 명령여( Commands which accept address ranges )

 

( 0 or 1 어드레스 명령어 )

 

0 어드레스 명령어에는 라벨, 주석, 블록과 같이 파일 내용에 아무런 영향을 주지 않는

명령어와 문자열 추가, 삽입, 스크립트 종료, 파일 내용 추가와 같은

명령어들로 어드레스가 필요한 명령어가 있습니다.

 

다음은 이런 명령어들을 정리한 것입니다.

 

옵션 설명
:label 라벨
#comment 주석
{ ... } 블록
= 현재 라인번호 출력
a \ text 문자열 추가
i \ text 문자열 삽입
q sed 스크립트 실행 종료
Q sed 스크립트 실행 종료
r 파일명 파일 내용 추가
R 파일명 파일의 첫 라인 추가

 

/# Test/,+3 은 어드레스 범위로 # Test가 포함된 라인부터 3번째 라인까지가 대상범위이며,

해당 범위 명령어들을 중괄호{}로 블록화하였음

현재라인번호를 출력하는 = 명령어

#으로 시작하는 주석

콜론:으로 시작하는 라벨이 있습니다.

 

# Test로 시작하는 라인부터 +3라인까지의 라인 번호 출력

 

cat sed-script.txt

/# Test/,+3 {

=

# first label

:label1

}

 

# 파일을 이용하여 sed 실행

 

sed -n -f sed-script.txt hosts

 

명령어 a \text는 해당 어드레스 다음 라인에 명시한 문자열을 추가합니다.

다음 예제는 172.10.2.13이 있는 라인 다음에 172.10.2.14 test3.example.com을 추가한 후 출력하는 예입니다.

sed에서 사용되는 명령어들은 한 라인에 한 명령어만 사용할 수 있습니다. 따라서

여러 줄의 명령어를 사용하려면 다음 예제와 같이 중괄호{}로 블록을 만들어주어야 합니다.

 

# 172.10.2.13 이 있는 다음 라인에 새 주소 172.10.2.14 추가

sed -n '/172.10.2.13/ { a \

172.10.2.14 test3.example.com

p }' hosts

 

i \text 명령어는 앞서 살펴보면 a \text와 유사하지만, 해당 어드레스 이전 라인에 명시한 문자열을 삽입합니다.

다음 에제는 172.10.13이 있는 라인 위에 172.10.2.14 test3.example.com을 삽입하고 수정된 내용을 출력합니다.

 

# 172.10.2.3 에 있는 라인 위에 새 주소 172.10.2.14 추가

 

sed -n '/172.10.2.3/ { i \

172.10.2.14 test3.example.com

p }' hosts

 

( q 명령어를 사용할 경우 )

q는 수행 중이던 스크립트를 종료할 때 사용하는 명령어입니다.

다음 예제를 보면 a 명령어에 의해 추가할 17.10.2.14 test3.example.com을 추가하지 않은채

추가할 테스트만 출력하고 sed 실행을 종료합니다.

 

# test3.example.com을 출력하지 않고 종료

sed -n '/172.10.2.13/ { a \

172.10.2.14 test3.exmaple.com

q

p } ' hosts

 

( Q 명령어를 사용할 경우 )

앞서 살펴본 예제에서 추가할 텍스트만 출력하고 sed 실행을 종료했다면, Q 명령어는 출력조차하지 않고

바로 sed 수행을 종료합니다.

 

# 아무것도 출력하지 않고 종료

sed -n '/172.10.2.13/ { a \

172.10.2.14 test3example.com

Q

p }' hosts

 

( r 파일명 명령어를 사용할 경우 )

r 파일명 명령어는 앞에서 명시한 해당 어드레스 뒤에 명시한 파일로부터 해당 내용을 읽어 해당 내용을 추가합니다.

 

다음 예제에서는 추가할 IP 주소와 호스트명을 sed-read.txt에 저장합니다.

 

그리고, sed를 이용해 단일 어드레스인 172.10.2.13 뒤에

r sed-read.txt를 선언하고 해당 내용을 출력하도록 하였습니다.

 

cat sed-read.txt

172.10.2.14 test3.example.com

172.10.2.15 test4.example.com

 

# 172.10.2.13 라인 뒤에 파일에 모든 새 IP 추가

sed -n '/172.10.2.13/ { r sed-read.txt

p }' hosts

 

( R 파일명 명령어를 사용할 경우 )

R 파일명 명령어는 r 파일명과는 다르게 해당 파일의 첫 번째 라인만 읽어 추가합니다. 다음 예제를 보면, 앞서 살펴본 예제와 동일하지만 명령어가 r에서 R로 바뀜으로 인해 해당 파일의 첫번째 라인인 172.10.2.14 test3.example.com만 추가된 것을 확인할 수 있습니다.

 

# 172.10.2.13 라인 뒤에 파일의 첫 번째 새 IP만 추가

sed -n '/172.10.2.13/ { R sed-read.txt

p }' hosts

 

[ 어드레스 범위 명령어 ]

 

어드레스 범위는 특정 라인부터 특정 라인까지를 의미하며,

이런 어드레스를 허용하는 명령어들에는 문자열 변경, 삭제, 출력, 라벨 분기와 같은 명령어들이 있습니다.

 

다음은 어드레스 범위 명령어 (Commands which accept address ranges)를 정리한 것입니다.

 

옵션 설명
b label 라벨을 호출함
c \ text 앞에서 명시된 패턴이 포함된 라인을 text 문자열로 변경
d D 앞에서 명시된 패턴 삭제
h H 패턴 공간을 홀드 공간에 복사/추가
g G 홀드 공간을 패턴 공간에 복사/추가
I 입력된 데이터의 현재 라인 출력
I width 명시한 너비에 맞게 입력된 데이터의 현재 라인 출력
n N 입력된 데이터의 다음 라인을 복사/추가
p P 현재 패턴 공간 출력
s/regexp/replacement/ 정규 표현식(regexp)에 해당하는 데이터를 그 다음 오는 데이터(replacement)로 변경함
t label / T label 앞에서 선언된 명령어를 실행 후 라벨로 분기
w 파일명 / W 파일명 명시한 파일에 현재 패턴 공간을 저장함
x 홀드와 패턴  공간의 콘텐츠를 교환함
y/source/dest/ 패턴이 포함된 라인의 문자열(source)를 dest 문자열로 변경

( b label 명령어를 사용할 경우 )

 

명령어 b label은 sed 명령어를 수행하거나 b label을 만나면 해당 라벨로 분기를 수행합니다.

 

다음 예제의 sed-script1.txt를 보면 # Test가 포함된 라인부터 3줄까지가 어드레스인 범위이며, 중괄호{} 사이의

블록에는 읽어들인 라인에 값이 없을 경우 다음 명령어인 문자열 변경을 수행하지 말고, label1이라는 라벨로 분기하라는 내용입니다.

 

이와 같이 sed 수행이 불필요한 경우 label을 통해 sed 수행을 분기할 수 있습니다.

이렇게 생성된 파일을 이용하여 sed를 수행하면 다음과 같이 Test나 test가 dev로 변경된 것을 확인할 수 있습니다.

 

cat sed-script1.txt

 

/# Test/,+3  {

# if input line is empty, doesn't execute replacing

/^#/ b label1

s/[tT]est/dev/

: label 1

p

}

 

# 스크립트 수행 결과 test가 dev로 변경되었음

sed -n -f sed-script1.txt hosts

 

 

 

 

# c \text 명령어를 사용할 경우

 

c \text 명령어는 앞에서 명시한 어드레스가 포함된 라인을 명시한 text로 변경하라는 의미입니다.

 

다음 예제를 보면 service.e로 시작되는 문자열이 포함된 라인을

122.10.10.30 vip.service.example.com으로 내용을변경하였음을 확인할 수 있습니다.

 

sed 명령어 다음에 사용된 tail 명령어는 파일 내용이 길어 해당 내용을 마지막 4라인만 확인하기 위해 사용되었습니다.

 

# service.e 가 있는 라인의 값을 변경

sed '/service.e/ c \122.10.10.30 vip.service.example.com' hosts | tail -n4

 

# d와 D 명령어를 사용할 경우

 

명령어 d와 D는 앞에서 명시한 어드레스에 해당하는 문자열이 포함된 라인을 삭제합니다.

 

이때, d 명령어는 뉴라인과 상관없이 해당 문자열이 포함된 라인을 삭제하며, D 명령어는 패턴 공간의 뉴라인을 인식하여 해당 뉴라인까지만 삭제합니다. 예제를 통해 다시 한번 더 설명하겠습니다.

 

다음 첫 번째 예제는 hosts의 문자열 중 We Will test to replace를 We will test to와 replace 사이에 뉴라인 \n을 추가하여 문자열 변경을 하였습니다. 그리고, text 포함된 라인을 삭제한 후 편집 내용을 출력해 보면 We Will로 시작하는 라인이 모두 사라진 것을 확인 할 수 있습니다. 이와 반대로 D 명령어를 사용한 두 번째 예제를 보면 We will test to까지만 삭제하고, 나머지 문자열은 삭제되지 않았음을 알수 있습니다.

 

# 뉴라인 상관없이 test가 포함된 라인삭제

sed -n '0,/NaleeJang/ {
s/We will test to replace/We will test to \nreplace/
/test/ d
p }' hosts

 

# 패턴 공간에 포함된 뉴라인을 인식한 후 test가 포함된 라인 삭제

sed -n '0,/NaleeJang/ {
s/We will test to replace/We will test to \nreplace/
/test/ D
p }' hosts

 

# h와 H 명령어를 사용할 경우

 

명령어 h 또는 H는 이런 홀드 버퍼의 내용을 패턴 버퍼로 복사합니다.

다음 예제는 Production을 Service로 변경한 후

홀드 버퍼의 내용을 패턴 버퍼로 복사하고 패턴 버퍼의 내용을 출력한 것 입니다.

문자열 변경은 패턴 버퍼에서 수행했고, 그 이후 홀드 버퍼를 패턴 버퍼로 복사했기 때문에

패턴 버퍼에서 변경했던 문자열을 원래 문자열로 원복 되었음을 알 수 있습니다.

 

# 홀드 버퍼 복사로 변경한 문자열 정보가 보이지 않음

sed -n '/Product/,+3 {

s/Production/Service/

h

p }' hosts

---------------------------------------------------------------------------------------------------------------------

  • 패턴 스페이스(Pattern space)와 홀드 스페이스(hold space)
  • sed 명령어는 동작시 내부적으로 두개의 워크스페이스를 사용하는데,
    (마치 우리 복사 붙여넣기의 임시 저장소 클립보드와 같다)
    이 두 버퍼를 패턴 스페이스(=패턴 버퍼)와 홀드 스페이스(=홀드 버퍼)라고 합니다.
  • 패턴 버퍼: sed가 파일을 라인단위로 읽을 때 그 읽힌 라인이 저장되는 임시 공간
    우리가 sed명령어로 출력하라는 명령을 주면 여기 있는 버퍼 내용을 출력하는거고,
    뭔가 조작을 하면 여기 저장되어 있는 내용을 조작하는 겁니다. 원본을 건드는게 아닙니다.
    즉 이 버퍼는 현재 내가 담고 있는 정보를 갖고 있겠죠. 텍스트 1라인에서 2라인으로 넘어가 글을 읽게 되면
    여기 패턴 버퍼에는 2라인 현재 내용이 저장되겠죠.
  • 홀드 버퍼 : 홀드 스페이스는 패턴 버퍼처럼 짧은 순간 임시 버퍼가 아니라
    좀 더 오랜 기간 가지고 있는 저장소입니다.
    2라인 작업중이더라도 1라인을 기억하고 있을 수 있는 거예요.
  • 즉, 어떤 내용을 홀드 스페이스에 저장하면,
    sed가 다음 행을 읽더라도 나중에 내가 원할 때 불러와서 재사용할 수 있는 버퍼가 홀드 버퍼가 됩니다.

출처 : https://nasa1515.tech/linux-sed/

---------------------------------------------------------------------------------------------------------------------

# 홀드 버퍼 복사로 변경한 문자열 정보가 보이지 않음

 

sed -n '/Product/,+3 {

s/Production/Service/

h

p }' hosts

 

# I 명령어를 사용할 경우

 

I 명령어는 현재 읽어들인 라인을 출력하는 명령입니다.

다음 예제는 host 파일에서 Product가 포함된 라인부터 아래 3줄까지 입력되는 현재 라인을 출력하는 예입니다.

I 명령어는 패턴 버퍼의 내용을 출력하는 p 명령어와는 다르게 문자의 끝을 알리는 $ 기호와 같은 특수 기호를 함께 출력합니다.

 

# I width 명령어를 사용할 경우

 

I width 명령어는 width는 너비를 의미하는 숫자로, 명시한 숫자만큼 라인의 너비를 보여줍니다.

 

다음 예제는 I 20을 사용하여 해당 내용을 너비 20에 맞추어 보여주고, 나머지 문자열은 다음 라인에 보여줍니다.

 

# 라인 너비를 20 에 맞추어 보여줌

 

sed -n '/Product/,+3 l 20' hosts

 

#n과 N명령어를 사용할 경우

 

# 입력된 라인의 다음 라인을 복사함. 복사후 출력을 했으므로 복사한 값 출력

 

sed -n '/Prodcut/,+3 {

n

p } ' hosts

 

# 복사전 출력을 했으므로 현재 입력된 라인을 출력

 

sed -n '/Product/,+3 {

p

N }' hosts

 

# p와 P 명령어를 사용할 겨웅

 

명령어 p와 P 명령어는 패턴 공간의 내용을 그대로 출력합니다. 이때, 패턴 내용에 편집에 의해 삽입된 뉴라인이 있다면 p는 뉴라인 상관없이 패턴 내용을 그대로 출력하지만, P는 뉴라인 다음 라인은 출력하지 않습니다.

 

아래 첫 번째 예제에서는 p를 사용하여 패턴 공간에 변경된 내용을 그대로 출력하였고, 두 번째 예제에서는 P를 사용하여 뉴라인이 있는 라인의 다음 라인은 출력되지 않았음을 알 수 있습니다.

 

# 소문자 p는 패턴 공간 내용을 그대로 출력

sed -n '0,/NaleeJang/ {

s/We will test to replace/We will test to\nreplace/

p }' hosts

 

# 대문자 P는 패턴 공간을 출력하되, 뉴라인이 있는 라인은 뉴라인까지만 출력

sed -n '0,/NaleeJang/ {

s/We will test to replace/We will test to\nreplace/

P }' hosts

 

#s/regexp/replacement/ 명령어를 사용할 경우

 

s/regexp/replacement/ 명령어는 regexp라는 정규 표현식과 일치하는 문자열을 replacement에서

명시된 문자열로 변경합니다.

 

" sed의 가장 기본적이면서 대표적인 명령어로 가장 많이 사용되는 명령어입니다. "

 

다음 예제는 0번째 라인부터 Nalee라는 문자열이 처음으로 검색된 라인에서 # 문자를 공백으로 변경하는 예제입니다.

 

sed -n '0,/Nalee/ {

s/^# //

p }' hosts

 

-------------------------------------------------------------------------------------------------

 

 

sed 명령어들을 대충 공부하고

쉘스크립트 예제들을 연습하고있던차

 

sed "s/ID_LIKE=//;s/\"//g"

 

sed명령어를 얼추 다 봤는데도

 

/;s/\"/

 

이게 뭔 뜻인지 도통 이해가 안되서 한참을 고민했다.

 

s/찾을문자열/바꿀문자열/g 형태를 쓴거같기는 한데...

 

 

구글링을 한 30분했더니..

 

파일 전체에서 특정 문자를 다른 걸로 바꾸고 싶을 때

sed 's/기존문자/다른문자/;s/기존문자2/다른문자2/'

여러 문자 바꿀 때는 세미콜론으로 구분해서 넣으면됨.

 

라고 sed명령어 한 문장에 2개를 쓰는것때문에 ;가 삽입된거였다.

해석을 해보면 ..

 

ID_LIKE=라는 문자열을 찾아서 // 없애고

첫번째 sed명령어의 마지막이라는 뜻으로 ;

그다음 바로 두번째명령어인 s/"//

" 쌍 따옴표를 찾아서 // 없애라는 뜻의 명령어였다..

 

 

 

 

 

 

 

 

728x90
728x90

wc명령어는

단어 수를 세어주는 명령어입니다.

 

wc 명령어 사용법

wc [옵션] [파일이름]

 

옵션 의미
-c 문자수만 보여준다
-m 캐릭터수만 보여준다
-l 라인수만 보여준다
-w 단어수만 보여준다
-L 가장 긴 문장의 길이를 보여준다.

 

 

728x90
728x90

날짜와 시간을 알려주는 date 명령어는 개발할 때는 물론이고,

시스템의 데이터를 동기화할때,

데이터를 백업할 때 등등 매우 많은 곳에서 사용합니다.

 

그런데, 막상 date를 이용해 내가 원하는 포맷으로 날짜를 출력하고 싶을 때는

어떻게 해야 하는지 잘 모르거나 생각이 나지 않아 인터넷에서 검색하곤 합니다.

 

[ Date 포맷 ]

 

date 포맷은 날짜와 포맷을 내가 원하는 형식으로 출력할 수 있도록 도와줍니다.

 

% 퍼센트 기호와 함께 사용되며 요일, 년, 월, 일, 시, 분, 초 등을 조합하여 원하는 날짜와 시간으로 출력할 수 있습니다.

 

아래 표는

 

런 date의 포맷을 정리한 것으로 다음과 같은 포맷을 사용하면, 다양하게 날짜와 시간을 표현할 수 있습니다.

 

포맷 설명
%% % 기호
%a 로케일 타입의 짧은 요일 (예 : Mon)
%A 로케일 타입의 요일 (예 : Monday)
%b 로케일 타입의 짧은 월 (예 : Jan)
%B 로케일 타입의 월 (예: January)
%c 로케일에 따른 날짜와 시간
(예: Thu Mar 3 23:05:25 2005)
%C 세기 (예 : 21)
%d 일 (예: 01)
%D 날짜 %m/%d/%y
%e 일 %_d와 동일함
%F 날짜(%Y-%m-%d)
%g 2 자리수 연도
%G 4 자리수 연도
%N 나노초(000000000..999999999)
%p 로케일 타입의 AM 또는 PM
%P %p와 동일하며, 소문자임
%r 로케일 타입의 시(예: 11:11:04 PM)
%R 24시간 기준의 시와 분, %H:%M과 동일
%s %UTC 타입의 초
%S 초 (00..60)
%t
%T 시간(%H:%M:%S)
%u 요일(1..7); 1은 월요일임
%U 일요일로 시작하는 연도의 주수 (00..53)
%V 월요일로 시작하는 연도의 주수 (01..53)
%w 주별 일수 (0..6); 0은 일요일임
%W 월요일로 시작하는 연도별 주수(00..53)
%h %b와 동일함
%H 시(00..23)
%I 시(01..12)
%j 일(001..366)
%k 시(0..23), %_H와 동일함
%l 시( 1..12 ), %_l와 동일함
%m 월(01..12)
%M 분(00..59)
%n 뉴라인
%x 로케일 타입의 날짜(예: 12/31/99)
%X 로케일 타입의 시간(예: 23/13:48)
%y 연도(00..99)
%Y 연도
%z 타임존(예: +0900)
%:z 타임존(예: +09:00)
%::z 타임존(예: +09:00:00)
%:::z 타임존(예: +09, +05:30)
%Z 타임존(예: KST)

 

다음은 위의 포맷을 활용한 예제를 알아보자.

 

#년-월-일 형태의 날짜 표현

date +%Y-%m-%d

ㄴ 2022-01-20

 

# 월-일-년(00) 형태의 날짜 표현

date +%m-%d-%y

ㄴ 01-20-22 %y(2자리수 연도)

 

# 일-영문월-년 형식의 날짜 표현

date +%d-%b-%Y

ㄴ 11-Jun-2020

 

# 12시간 기준의 시:분:초 AM/PM 형식의 시간 표현

date '+%Y-%m-%d %l:%M:%S %p'

ㄴ 12:39:04 PM

 

# 24시간 기준의 시:분:초 시간 표현

date '+%k:%M:%S'

ㄴ 12:40:43

 

# 년-월-일 시:분:초 AM/PM 형식의 날짜 표현

date '%Y-%m-%d %l:%M: %p'

ㄴ 2022-01-20 11:43 AM

 

# 년-월-일 시:분:초 타임존 시간차 형식의 날짜 표현

date '+%Y-%m-%d %k:%M: %Z %:z'

ㄴ 2022-01-20 11:17 KST +09:00

 

# 요일, 월, 일, 년 형식의 날짜 표현

date '+%A, %B %d,%Y'

ㄴ Thursday, June 11, 2020

 

# 요일, 월 일,년 at 시:분:초 AM/PM 형식의 날짜 표현

date '+%A, %B %d, %Y at %H:%M:%S %p'

ㄴ Thursday, January 20, 2022 at 11:28:12 AM

 

# 년월일시분초 형식의 날짜 표현

date +%Y%m%d%H%M%S

ㄴ 20220120113340

 

# 이번 주는 올해의 몇 번째 주일까?

echo "This week is the $(date +%V)th week of the year."

ㄴ This week is the 03th week of the year.

 

# 오늘은 몇 번째 요일일까?

echo "Today is the $(date +%u)th day of the week."

Today is the 4th day of the week.

 

728x90
728x90

https://github.com/Byeong-gook/cosiguk

대학교 캡스톤 프로젝트(졸업작품)으로 친구들과 같이 진행했던 프로젝트이다.

 

어플리케이션 선정동기는

 

코로나 19 라는 바이러스 확산이 심해지면서

전세계에 전례없는 규모와 충격 피해를 주고있어서

 

국내 코로나 피해 현황 그리고 관련 정보들을 한곳에서 다양하게 제공하면서

사용자들간 정보 공유를 통해 소통할수 있는 공간이 있으면 좋겠다는 취지에서 프로젝트를 시작하게 됐다.

 

프로젝트 인원중에서 서버를 개인적으로 다뤄본 얘들이 아무도 없어서

결국 내가 서버를 맡게 되었는데

 

그 결과 첫 직장도 서버와 관련된 직장으로 오게 되었다...

( 원래는 웹 개발자를 준비하고 있었음... )

 

라즈베리파이를 통해 개인적인 서버를 구축하고

스프링 부트로 자체 API를 제작하고

DB를 하나로 통합해서

 

3가지 플랫폼에 제공하는 형태로 프로젝트를 진행 하기로 친구들과 얘기를 했다.

 

사실 나도 서버라던지 API 문서를 만들어보거나 기존에 다뤄본게 아니기때문에

라즈베리파이를 구축하고 가비아라는 사이트에서 도메인을 사서 

최종적으로 JAR파일을 서버에 올리는과정까지

꽤나 많은 삽질을 했다.

 

 

현재까지 개발된 상황은 이렇고

 

최근에 주말에 카페에서 모임을 가지면서

친구들과 보완할것들을 얘기를 했는데

현재까지 개발된것 이외에 추가적으로

시각적인 데이터 (차트) 같은것들이 있으면 좋을거 같다고 판단을 해 

 

2월까지 각자 맡은 파트를 보완하는것으로 결론 내렸다.

 

사실 다 졸업을 앞두고

직장생활을 하면서 토이프로젝트를 진행하는거라 개발진행속도가 예전보다 다들 많이 느려진거 같다.

 

2월까지 최종보완해서 서버에 최종적으로 등록한후 

 

보안적인 문제라던지 다른것들을 점검한후

 

처음으로 앱스토어에 진행한 프로젝트를 배포 해볼까 한다.

3월 즈음으로 예상하고 있는데 문제 없이 잘 진행이 됐으면 좋겠다. 

 

728x90

+ Recent posts