다음 파일이 있습니다(예제입니다).
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