단어 목록을 한 줄로 결합하고 문자를 추가합니다.

단어 목록을 한 줄로 결합하고 문자를 추가합니다.

예를 들어, 각 줄에 대한 단어 목록이 있는 파일을 얻고 싶습니다.

act
bat
cat
dog
eel

그리고 한 줄에 나열하고, 쉼표로 구분하여 인용하세요. 결과는 다음과 같습니다.

'act', 'bat', 'cat', 'dog', 'eel',

따라서 작은따옴표, 단어, 또 다른 작은따옴표, 쉼표, 공백 순입니다. 그런 다음 새 이름의 새 파일로 출력합니다.

답변1

짧은printf방법:

printf "'%s', " $(< file) > output

답변2

사용 sedtr:

$ sed -e "s/^/'/" -e "s/$/', /" file | tr -d '\n'
'act', 'bat', 'cat', 'dog', 'eel',

(출력 끝에 개행 문자가 없습니다)

input 의 각 줄 시작과 끝 부분에 sed따옴표(및 후속 쉼표와 공백)를 삽입하고 tr줄 바꿈을 제거합니다.

출력을 파일로 리디렉션:

$ sed -e "s/^/'/" -e "s/$/', /" file | tr -d '\n' >newfile

답변3

사용 awk:

awk '{printf ("'\'%s\'', ", $0)}' infile > new_file
'act', 'bat', 'cat', 'dog', 'eel',

또는 끝에 추가 쉼표를 피하려면 대신 다음을 사용하십시오.

awk '{printf S"'\''"$0"'\''";S=", "}'
'act', 'bat', 'cat', 'dog', 'eel'

paste아니면 따옴표 없이 직접 사용하세요 .

paste -d, -s infile
act,bat,cat,dog,eel

그런 다음 도움말을 통해 참조하십시오 sed.

sed -r "s/(\w+)/'\1'/g" <(paste -d, -s infile)
'act','bat','cat','dog','eel'

답변4

펄 방법:

$ perl -lne '$sq="\x27";push @a,$sq.$_.$sq;END{ print join( ",",@a) }' input.txt                                                                                                                                                           
'act','bat','cat','dog','eel'
  • 여기서는 16진수 값을 변수에 저장된 작은따옴표로 사용 sq하고 파일에서 읽은 각 줄에 대해 작은따옴표로 묶습니다.
  • a작은따옴표가 있는 각 줄은 배열 로 푸시됩니다.
  • 모든 내용을 읽은 후 Join은 각 배열 항목에서 다음과 같이 연결된 텍스트 문자열을 생성합니다.,

Python 메서드는 동일한 아이디어를 따릅니다.

$ python -c 'import sys;sq="\x27";print ",".join([ sq + l.strip() + sq  for l in sys.stdin  ])' < input.txt                                                                                                                                 
'act','bat','cat','dog','eel'
  • stdin여기서는 <쉘 연산자를 통해 입력 파일을 명령 스트림으로 리디렉션합니다.
  • \n각 줄은 Perl 메소드에서 설명한 것과 동일한 아이디어를 통해 참조되는 스트립 메소드를 통해 개행 문자에서 제거됩니다.
  • [item for item in iterable]모든 행은 구조 (목록 이해라고 함)를 통해 목록으로 처리됩니다 .
  • 마지막으로 ",".join()모든 목록 항목에서 멋진 문자열을 만들어 보겠습니다.

관련 정보