sed/awk 작업 목록 사용

sed/awk 작업 목록 사용

다음 목록을 특정 형식으로 정리하고 싶습니다.

현재의:

42.53e-12
43.64e-12
45.78e-12
49.86e-12
57.87e-12
73.68e-12
105.3e-12

필요

"42.53e-12, 43.64e-12, 45.78e-12, 49.86e-12, 57.87e-12, 73.68e-12, 105.3e-12"

모든 숫자는 쉼표로 구분되며 목록은 따옴표로 묶입니다.

답변1

사용 awk:

awk '{printf (NR>1)?", "$0:"\""$0} END {print "\""}' infile

또는 다른 방법으로:

awk '$1="\""$1' RS= ORS="\"\n" OFS=', ' infile

echo또는 및 명령의 조합을 사용하십시오 sed(파일에 쉘 단어 분리가 발생하는 공백이 없다고 가정).

sed 's/ /, /g' <(echo \"$(<infile)\")

답변2

  1. 순수한POSIX sh, (외부 프로그램을 로드하지 않기 때문에 dash현재 쉘인 경우 작은 파일의 경우 가장 빠릅니다):

    n='"'; while read x; do n="$n$x, "; done < file; echo ${n%,*}\"
    
  2. Pure , ( 현재 쉘인 bash경우 작은 파일의 경우 가장 빠름 ):bash

    n=$(<file); echo \"${n//
    /, }\"
    
  3. 순수한 sed:

    sed -n 'H;${g;s/\n/, /g;s/, $//;s/, \(.*\)/"\1"/p}' file
    
  4. 쉘 도구:

    /bin/echo -e \"$(xargs printf "%s, " < file)'\b\b"'
    

답변3

목표를 달성하는 여러 가지 방법:

paste+sed해결책:

paste -d',' -s file | sed 's/,/, /g; s/^\|$/"/g'

python해결책:

python -c 'import sys; print("\""+", ".join(i.strip() for i in sys.stdin)+"\"")' <file

출력(두 방법 모두):

"42.53e-12, 43.64e-12, 45.78e-12, 49.86e-12, 57.87e-12, 73.68e-12, 105.3e-12"

답변4

awk 'BEGIN{ ORS=""; pre="\""}{print pre $0; pre=","}END{ORS="\n";print "\""}'

관련 정보