awk를 사용하여 줄을 구분하는 방법

awk를 사용하여 줄을 구분하는 방법

csv 파일에서 행을 구분하는 방법은 다음과 같습니다.

(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye),(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)

아래에는 2개의 다른 줄이 있습니다.

(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)

나는 다음을 사용하려고합니다 :

awk -F"[()]" '{print $2}' test.csv 

하지만 작동하지 않고 여러 줄이 누락되었습니다.

데이터는 실제로 SQL 쿼리이므로 데이터를 추출한 후 쉼표(뒤)와 앞(행 구분 기호)을 사용하여 다른 행으로 변환해야 합니다.

답변1

GNU 사용 sed(예제 입력은 이라는 파일에 저장됩니다 ./input):

$ sed -e 's/),(/)\n(/g' ./input
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)

그러면 모든 쉼표가 개행 문자로 변경됩니다 ),(.

경고하다: 해당 문자 시퀀스가 ​​실제 데이터에 나타나면 거기에서도 변경됩니다.

에서 동일한 작업을 수행할 수 있지만 다음을 awk사용하는 것보다 장점이 거의 없습니다 sed.

$ awk 'gsub(/\),\(/,")\n(",$0)' ./input
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)

awk기능이 필요한 입력 라인에 대해 추가 처리를 수행 하려는 경우가 아니면 sed.

답변2

이 awk 명령은 원하는 작업을 수행합니다.

awk -F '),' '{ print $1")" "\n" $2}' source.csv

결과:

(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)

답변3

cat test.csv | tr -d "()" | sed 's/goodbye/goodbye\n/g'

  • sed는 문자열을 번역합니다안녕히 가세요줄바꿈 입력(\N). sed 's/goodbye/\n/g'다음 명령을 사용하여 bye를 제외 할 수 있습니다 ."G"첫 번째 일치 항목뿐만 아니라 모든 행에 대해 이 작업을 수행합니다.
  • tr선택적으로 대괄호를 제거합니다(tr을 사용하여 제거하지 않고 다른 것으로 변환할 수 있음).

답변4

파이썬으로 시도해 보았습니다.

a=(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye),(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)

#!/usr/bin/python
import re
b=a.split("),")
for i in range(0,len(b),1):
    if i == 0:
        d=")"
        print b[i]+d
    else:
        print b[i]

산출

(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye)
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)

관련 정보