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タグの間にフィールドを挿入します。

関連情報