awk - 쉼표를 줄 바꿈하거나 추가하지 않고 열 값을 인쇄합니다.

awk - 쉼표를 줄 바꿈하거나 추가하지 않고 열 값을 인쇄합니다.

입력.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, 그렇지 않으면 현재 줄과 연결되는 쉼표를 보냅니다.

관련 정보