임베디드 관련 카테고리/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;}' 파일명
이 명령어가 하는 일을 한 단계씩 설명해볼게요.
명령어 설명
- NF:
- NF는 Number of Fields의 약자예요. awk에서 NF는 현재 줄에 있는 필드(공백으로 구분된 항목)의 개수를 나타냅니다.
- 간단히 말해, 줄에 내용이 있으면 NF 값이 0보다 크고, 빈 줄이면 0이 됩니다.
- 따라서 NF {} 부분은 빈 줄이 아닌 경우에만 명령어를 실행하겠다는 뜻이에요.
- sub(/\r/, ""):
- sub()는 문자열을 대체하는 함수입니다. 여기서는 \r(캐리지 리턴, Windows에서 주로 사용되는 줄바꿈 문자)를 빈 문자열로 바꿔서 삭제하는 역할을 합니다.
- 왜 이걸 사용하냐면, 파일이 Windows 환경에서 만들어졌을 경우 줄바꿈이 \r\n으로 되어 있을 수 있기 때문이에요. Unix 계열(OS X, 리눅스, WSL)에서는 \n만 사용하니까 Windows 스타일 줄바꿈인 \r을 제거해야 문제가 생기지 않습니다.
- 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(캐리지 리턴)을 제거하고, 줄바꿈 없이 이어서 출력합니다.
- 인증서 파일이나 키 파일을 다룰 때 유용하게 사용할 수 있어요!
이 명령어를 활용해서 좀 더 깔끔하게 데이터를 처리해보세요!