콘텐츠 형식 변경 [중복]

콘텐츠 형식 변경 [중복]

1000줄/항목이 포함된 텍스트 파일이 있습니다. 이 1000개의 항목은 내 데이터 프레임의 열 이름에 해당합니다. 이는 모델 개발을 위해 데이터 프레임에 추가해야 하는 새로운 기능입니다. 내 입력 텍스트 파일은 다음과 같습니다.

show temperature all#Total Numbers Approved#g2/3
show temperature all#Total Numbers Approved#g2/2
show temperature all#Total Numbers Approved#g2/4
show temperature all#Total Numbers Approved#g0/2
show temperature all#Total Numbers Sent#g1/2
show temperature all#Total Numbers Sent#g1/3
show temperature all#Total Numbers Sent#g1/1
formulastat gpucores all parameter function-frames#formula:1#gpucores:11
formulastat gpucores all parameter function-frames#formula:1#gpucores:10
formulastat gpucores all parameter function-frames#formula:2#gpucores:10
formulastat gpucores all parameter function-frames#formula:2#gpucores:11
formulastat gpucores all parameter function-frames#formula:0#gpucores:8

각 줄에 ''를 자동으로 추가하고 개행을 제거하고 각 줄 항목 뒤에 쉼표를 추가하고 싶습니다. 예상 출력은 다음과 같습니다.

'show temperature all#Total Numbers Approved#g2/3', 'show temperature all#Total Numbers Approved#g2/2', 'show temperature all#Total Numbers Approved#g2/4', 'show temperature all#Total Numbers Approved#g0/2', 'show temperature all#Total Numbers Sent#g1/2', 'show temperature all#Total Numbers Sent#g1/3', 'show temperature all#Total Numbers Sent#g1/1', 'formulastat gpucores all parameter function-frames#formula:1#gpucores:11', 'formulastat gpucores all parameter function-frames#formula:1#gpucores:10', 'formulastat gpucores all parameter function-frames#formula:2#gpucores:10', 'formulastat gpucores all parameter function-frames#formula:2#gpucores:11', 'formulastat gpucores all parameter function-frames#formula:0#gpucores:8'

답변1

# if you need the space after comma
$ seq 10 | perl -pe 's/.+/"$&"/; s/\n/, / if !eof'
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"

# if space isn't required
$ seq 10 | sed 's/.*/"&"/' | paste -sd,
"1","2","3","4","5","6","7","8","9","10"

큰 따옴표 대신 작은 따옴표가 필요한 경우 위의 솔루션에서 \x27대신 사용하십시오."

답변2

쉘 루프를 사용하면 쉽게 이 작업을 수행할 수 있습니다. 항목을 읽고 따옴표를 사용하여 인쇄하면 됩니다. 유일한 까다로운 점은 마지막 항목을 제외한 모든 항목 뒤에 ","를 인쇄하거나 첫 번째 항목을 제외한 모든 항목 앞에 ","를 인쇄하는 것입니다(이것이 더 쉽습니다).

{
    read item
    printf "'%s'" "$item"
    while IFS= read -r item; do
        printf ", '%s'" "$item"
    done
    echo
} <infile.txt >outfile.txt

답변3

$ awk '{printf "%s\047%s\047", sep, $0; sep=", "} END{print ""}' file
'show temperature all#Total Numbers Approved#g2/3', 'show temperature all#Total Numbers Approved#g2/2', 'show temperature all#Total Numbers Approved#g2/4', 'show temperature all#Total Numbers Approved#g0/2', 'show temperature all#Total Numbers Sent#g1/2', 'show temperature all#Total Numbers Sent#g1/3', 'show temperature all#Total Numbers Sent#g1/1', 'formulastat gpucores all parameter function-frames#formula:1#gpucores:11', 'formulastat gpucores all parameter function-frames#formula:1#gpucores:10', 'formulastat gpucores all parameter function-frames#formula:2#gpucores:10', 'formulastat gpucores all parameter function-frames#formula:2#gpucores:11', 'formulastat gpucores all parameter function-frames#formula:0#gpucores:8'

관련 정보