bash/sed를 사용하여 요소 목록 형식 변경

bash/sed를 사용하여 요소 목록 형식 변경

다음과 같은 목록이 포함된 CSV 파일이 있습니다.

URL,Domain,anchor
https://example1.com,Example1,Category1

다음과 같이 HTML로 다시 포맷해야 합니다.

<li><a href="https://example1.com" title="Category1"> Example1 </a></li>

나는 성공하지 못한 채 한동안 sed와 awk를 가지고 놀았습니다. 지금까지의 최선의 접근 방식은 첫 번째 문자열을 먼저 삽입한 https다음 거기에서 수동으로 작업하는 것이었습니다. 그래서 이 작업을 수행하는 더 좋고 빠른 방법이 있는지 궁금합니다.

답변1

테스트 파일에 다음 줄을 추가했습니다 eg.csv.

URL,Domain,anchor
https://example1.com,Example1,Category1
https://unix.stackexchange.com/questions/693322/reformatting-a-list-of-elements-using-bash-sed,This question,Here

그런 다음 다음 기본 AWK 스크립트를 작성했습니다.

#!/bin/bash
awk -F "," '
 NR == 1 { next } # Ignore titles
  {
     printf( "<li><a href=\"%s\" title=\"%s\"> %s </a></li>\n",
       $1, $3, $2 )
  }
' <eg.csv

결과 :

$ ./fmt
<li><a href="https://example1.com" title="Category1"> Example1 </a></li>
<li><a href="https://unix.stackexchange.com/questions/693322/reformatting-a-list-of-elements-using-bash-sed" title="Here"> This question </a></li>

나는 그것이 당신의 요구를 충족시키기를 바랍니다.

답변2

그리고 sed:

sed '1d;s@\(^[^,]*\),\([^,]*\),\(.*\)@<li><a href="\1" title="\3"> \2 </a></li>@' test

헤더 행( 1d)을 제거하고 각 행을 각 쉼표로 분할하여 필드를 가져옵니다.

얻은 html 태그 사이에 필드를 삽입합니다.

관련 정보