임베디드 관련 카테고리/Linux command

[Linux, Ubuntu] awk 명령어로 개행 없이 한 줄로 파일 읽기

CBJH 2024. 10. 2. 09:48
728x90
반응형

개발을 하다 보면, 여러 줄로 되어 있는 파일을 한 줄로 읽어야 할 때가 있어요. 예를 들어, **인증서 파일(.crt)이나 키 파일(.key)**은 보통 여러 줄로 구성되어 있는데, 이를 한 줄로 만들어야 할 때가 있습니다. 특히 JSON 포맷에 넣을 때 개행(줄바꿈) 문자가 들어가면 오류가 생길 수 있죠.

여기에서 사용할 수 있는 간단한 명령어가 바로 awk입니다. 이 글에서는 awk 명령어를 사용해 파일을 한 줄로 변환하는 방법을 쉽게 설명해 드릴게요!

 

기본적인 awk 명령어 설명

 

awk는 텍스트 파일을 행 단위로 읽어서 특정 조건에 맞춰 처리할 수 있는 아주 강력한 도구입니다. 여기서 사용한 명령어는 다음과 같습니다:

awk 'NF {sub(/\r/, ""); printf "%s",$0;}' 파일명

이 명령어가 하는 일을 한 단계씩 설명해볼게요.

명령어 설명

  1. NF:
    • NF는 Number of Fields의 약자예요. awk에서 NF는 현재 줄에 있는 필드(공백으로 구분된 항목)의 개수를 나타냅니다.
    • 간단히 말해, 줄에 내용이 있으면 NF 값이 0보다 크고, 빈 줄이면 0이 됩니다.
    • 따라서 NF {} 부분은 빈 줄이 아닌 경우에만 명령어를 실행하겠다는 뜻이에요.
  2. sub(/\r/, ""):
    • sub()는 문자열을 대체하는 함수입니다. 여기서는 \r(캐리지 리턴, Windows에서 주로 사용되는 줄바꿈 문자)를 빈 문자열로 바꿔서 삭제하는 역할을 합니다.
    • 왜 이걸 사용하냐면, 파일이 Windows 환경에서 만들어졌을 경우 줄바꿈이 \r\n으로 되어 있을 수 있기 때문이에요. Unix 계열(OS X, 리눅스, WSL)에서는 \n만 사용하니까 Windows 스타일 줄바꿈인 \r을 제거해야 문제가 생기지 않습니다.
  3. printf "%s",$0;:
    • printf는 줄바꿈 없이 문자열을 출력할 때 사용해요. %s는 문자열 포맷이고, $0는 awk에서 현재 줄 전체를 의미해요.
    • 즉, 현재 줄을 출력하는데, 줄바꿈 없이 이어서 출력하라는 뜻입니다.

전체 동작 요약

이 명령어는 각 줄에 있는 내용을 이어서 한 줄로 출력합니다. 만약 파일이 여러 줄로 되어 있으면, 이 명령어는 그 줄들을 모두 붙여 하나의 긴 문자열로 만들어줍니다.

사용 예시

다음과 같이 .crt 파일과 .key 파일을 한 줄로 만들 수 있습니다:

CERT=$(awk 'NF {sub(/\r/, ""); printf "%s",$0;}' "./ClientKey/client1.crt")
KEY=$(awk 'NF {sub(/\r/, ""); printf "%s",$0;}' "./ClientKey/client1.key")

이렇게 하면 여러 줄로 된 client1.crt와 client1.key 파일이 줄바꿈 없이 하나의 문자열로 저장됩니다. JSON 파일에 넣어야 하거나, 여러 줄로 된 파일을 한 줄로 처리하고 싶을 때 유용하죠!

정리

  • awk 'NF {sub(/\r/, ""); printf "%s",$0;}' 파일명 명령어는 여러 줄로 된 파일을 한 줄로 변환해줍니다.
  • Windows에서 만들어진 파일에서는 \r(캐리지 리턴)을 제거하고, 줄바꿈 없이 이어서 출력합니다.
  • 인증서 파일이나 키 파일을 다룰 때 유용하게 사용할 수 있어요!

이 명령어를 활용해서 좀 더 깔끔하게 데이터를 처리해보세요!