外部シェルコマンドを使用して2行ごとに処理してマージします。

外部シェルコマンドを使用して2行ごとに処理してマージします。

次の構造のファイルがあります。

#1552342335
ls
#1552342359
date
#1552342380
cat .bash_history 

つまり、タイムスタンプの後にテキスト行が続きます。シェルdate(と同様)を使用して各タイムスタンプ行を処理し、次の行とマージした後にテーブルラベルでラップしますdate -d ${1/\#/@} '+%F %T'。つまり、出力は次のようになります。

<tr> <td>2019-03-11 18:12:15</td> <td><pre>ls</pre></td> </tr>
<tr> <td>2019-03-11 18:12:39</td> <td><pre>date</pre></td> </tr>
<tr> <td>2019-03-11 18:13:00</td> <td><pre>cat .bash_history</pre></td> </tr>

私はこれがこのようになることを知っていますが、1つawk 'NR % 2 {print | " <something here>" } !(NR % 2) {p=$0}' input_fileのコマンドで必要なすべての変換を達成する方法を見つけることができません。

ベストアンサー1

GNU Awk(gawk)を使用すると、組み込みの次のものを使用できますstrftime

gawk '
    NR%2 {ts = strftime("%F %T",substr($0,2)); next} 
         {printf("<tr> <td>%s</td> <td><pre>%s</pre></td> </tr>\n",ts,$0)}
' input_file 
<tr> <td>2019-03-11 18:12:15</td> <td><pre>ls</pre></td> </tr>
<tr> <td>2019-03-11 18:12:39</td> <td><pre>date</pre></td> </tr>
<tr> <td>2019-03-11 18:13:00</td> <td><pre>cat .bash_history </pre></td> </tr>

おすすめ記事