파일의 변수에 문자열/단어를 삽입하고 공백 대신 구분 기호를 연결합니다.

파일의 변수에 문자열/단어를 삽입하고 공백 대신 구분 기호를 연결합니다.

다음 파일이 있습니다(예제입니다).

more machines.txt


Node23
Node34
Node12
Node95
Node23

모든 노드의 목록을 변수에 삽입하고 각 노드를 "," 구분 기호로 연결하려고 합니다.

예상 결과의 예(공백 없음)

Node23,Node34,Node12,Node95,Node23

이것을 시도해 보자

LIST=` sed -e 's/\s\+/,/g'  machines.txt ` 

그러나 우리의 방법은 기계 사이에 구분 기호를 추가하지 않습니다.

echo $LIST

Node23 Node34 Node12 Node95 Node23

변수에서 csv 목록을 얻는 올바른 방법은 무엇입니까(이 구문은 bash 스크립트에 있어야 합니다)

답변1

그리고 paste:

list=$(paste -sd, < machines.txt)

답변2

sed명령은 기본적으로 한 줄씩 계산합니다. 따라서 명령은 개행 문자를 대체하지 않습니다. 다음 명령을 실행하여 이를 확인할 수 있습니다.

echo "$LIST"

이는 원본 파일 콘텐츠에 대해 실제로 아무 작업도 수행하지 않았음을 나타냅니다.

문자 하나만 바꾸므로 이 tr도구를 로 사용하는 것이 좋습니다 sed. 결과 명령은 다음과 같습니다.

LIST=$(tr '\n' ',' < machines.txt) 

기본적으로 이 줄은 \n개행 문자를 쉼표로 바꾸려는 의미입니다.,

sed뒤에 쉼표가 있는 경우 마지막 쉼표를 제거하는 명령을 추가할 수도 있습니다 .

LIST=$(tr '\n' ',' < machines.txt | sed 's/,$//')

답변3

내 접근 방식:

$ LIST=$(echo $(<machines.txt) | sed 's/ /,/g')
$ echo "$LIST"
$ Node23,Node34,Node12,Node95,Node23

관련 정보