
두 개의 레코드와 세 개의 필드가 있는 입력 파일, 두 번째 속성에는 새 줄 문자가 포함되어 있습니다. 모든 필드 값을 큰따옴표로 묶고 싶습니다.
입력 파일:
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
탭을 다시 새 줄로 변환합니다.