AWK 및 SED 모드를 사용하면 다음과 유사한 파일이 생성됩니다.
| 9000 3000 1000 0000 0000 2000 1000 2000 | 5669000 518000 3000 16000 0000 28000 2241000 2841000 | 9020000 453000 520000 4000 2852000 5191000 75000 |
"|"로 구분된 줄을 쉼표로 구분된 한 줄로 합칠 수 있나요?
9000,3000,1000,0000,0000,2000,1000,2000 5669000,518000,3000,16000,0000,28000,2241000,2841000 9020000,453000,520000,4000,2852000,5191000,75000
이 작업을 수행하기 위해 붙여넣기를 사용했지만 "|" 사이의 줄 수가 동일하지 않기 때문에 원치 않는 결과가 발생합니다.
답변1
awk
해결책. 의심이 조금 길어졌습니다.
$ awk 'BEGIN{RS="|"}NF>1{print substr(gensub(/\n/,",","g"),2,length($0)-2)}' file
9000,3000,1000,0000,0000,2000,1000,2000
5669000,518000,3000,16000,0000,28000,2241000,2841000
9020000,453000,520000,4000,2852000,5191000,75000
$
답변2
이것은 잘 작동하는 것 같습니다:
$ tr "|\n" "\n," < input | sed 's/^,//;s/,$//'
9000,3000,1000,0000,0000,2000,1000,2000
5669000,518000,3000,16000,0000,28000,2241000,2841000
9020000,453000,520000,4000,2852000,5191000,75000
우리는 이를 s를 newline으로, newline을 s로 변환하는 tr
데 사용합니다 . 그런 다음 결과 출력을 가져와 선행 또는 후행 s 로 제거합니다 .|
,
,
sed
답변3
sed ':L; ${s/\n/,/g; s/,|,/\n/g; s/|,\|,|//g}; N; bL;' file
답변4
awk -vRS='|' -vOFS=, '$1=$1""' infile
- ,
RS='|'
awk의 기본값을 변경하십시오오른쪽에코코드에스eerator는\n
이를 파이프로 변경합니다|
. ,
OFS=,
awk의 기본값을 변경하십시오산소산출에프생산하다에스eerator는 쉼표를 공백으로 바꿉니다,
.(
$1==$1
모든 필드를 사용할 수 있음)은 재평가를 발생시키고$0
(전체 행은 awk로 알려져 있음)|
RS as 및 OFS as 를 기반으로 필드를 조인 합니다,
.큰따옴표는
'$1=$1""'
awk가 문자열 할당을 수행하도록 강제하는 데 사용되므로 0만 있는 줄은 삭제되지 않습니다.출력은 다음과 같습니다
9000,3000,1000,0000,0000,2000,1000,2000 5669000,518000,3000,16000,0000,28000,2241000,2841000 9020000,453000,520000,4000,2852000,5191000,75000