파일의 개행 필드 값에 따옴표를 추가하는 방법

파일의 개행 필드 값에 따옴표를 추가하는 방법

입력 파일에는 두 개의 레코드와 세 개의 필드가 있으며 두 번째 속성에는 개행 문자가 포함되어 있습니다. 각 필드 값을 큰따옴표로 묶고 싶습니다.

입력 파일:

100|Alert created becuase of high volume.
Money withdrawan more 5000.
Try to access acccount from unathorised devíce|2019-01-24
200|Minimum amount not avialable in your account.
Last time deposited amonut month ago|2019-01-24

원하는 출력은 다음과 같습니다.

"100"|"Alert created becuase of high volume.
Money withdrawan more 5000.
Try to access acccount from unathorised devíce"|"2019-01-24"
"200"|"Minimum amount not avialable in your account.
Last time deposited amonut month ago"|"2019-01-24"

답변1

이 awk를 사용해 볼 수 있습니다.

awk -F'\n' '!f{$1="\""$1;f=1}{f=f+gsub("[|]","\"|\"")}f==3{$0=$0"\"";f=0}1' infile

답변2

당신은 이것을 할 수 있습니다 perl:

perl -0pe 's/([^|]*)\|([^|]*)\|([^|\n]*)(\n|$)/"\1"|"\2"|"\3"\4/g' input_file
  • -0한 줄씩 읽는 대신 한 번에 하나씩 파일을 읽으십시오.
  • -p마지막 줄을 인쇄하다
  • -e표현 방식
  • s/pattern/replacement/g패턴을 바꾸기로 바꾸기

답변3

$ cat input.txt | tr "\n" "\t" \
  |awk -v FS="|" -v OFS="|" '{for(i=1;i<=NF;i++) $i="\""$i"\"";}1' \
  |tr "\t" "\n"
  • tr새 행을 탭으로 변환합니다. 따라서 입력은 선형화됩니다.
  • 필드 구분자로 awk처리되도록 지시합니다 . |이제 각 필드를 반복하고 따옴표를 추가할 수 있습니다. 그런 다음 전체 줄을 인쇄하십시오.
  • tr탭 문자를 다시 새 줄로 변환

관련 정보