입력.txt
EN1
EN2
EN3
EN4
EN5
산출
EN1,EN2,EN3,EN4,EN5
나는 awk를 시도했다. 하지만 쉼표로 인쇄되지 않습니다.
awk 'BEGIN { OFS = ","} { printf $1}' input.txt
GNU Awk 버전 4.0.0이 있습니다.
답변1
awk 'BEGIN{ORS=","}1' input.txt
다음을 생성합니다.
EN1,EN2,EN3,EN4,EN5,
그래서예쉼표로 인쇄합니다(따라서 이 일이 발생하지 않는다는 게시물의 귀하의 의견을 이해했는지 잘 모르겠습니다). 하지만 후행 쉼표가 문제인 것 같습니다.
GNU Awk 3.1.7로 테스트되었습니다.
답변2
저도 오래된 주제를 알고 있지만 거부할 수 없었습니다. 여기 또 다른 짧고 간단한 방법이 있습니다.
$ paste -sd, input.txt
EN1,EN2,EN3,EN4,EN5
$
Linux 및 Solaris는 물론 다른 플랫폼에서도 작동합니다.
답변3
tr
이 경우에 사용할 수 있습니다 .
tr '\n' ',' <input.txt
또한 마지막 개행 문자를 쉼표로 바꿉니다. 이를 방지하려면 Linux에서 입력 파일이 줄 바꿈으로 끝나는 것을 알고 있는 경우:
<input.txt head -c -1 | tr '\n' ,
; echo
출력을 개행 문자로 끝내려면 추가하십시오.
또는 쉘이 후행 쉼표(있는 경우)를 제거하도록 할 수 있습니다.
columns=$(<input.txt tr '\n' ',')
echo "${columns%,}"
답변4
줄 끝에 쉼표를 인쇄하지 않는 방법:
{printf("%s", NR == 1 ? $0 : ","$0);} END {printf("\n");} file
설명하다
첫 번째 줄( NR == 1
)이 보이면 그냥 인쇄하세요. 그렇지 않으면 쉼표와 줄이 인수로 전송됩니다 printf
.
이 솔루션은 다음과 같은 AWK
삼항 연산자를 사용합니다.?:
NR == 1 ? $0 : ","$0
NR
변수가 동일 하면 1
첫 번째 줄을 인수로 보내고 printf
, 그렇지 않으면 현재 줄과 연결되는 쉼표를 보냅니다.