てくてっく

コマ撮り作家系エンジニアです。日々地味ぃぃぃにつまづく技術的な問題について、備忘録として作ります。

Linuxコマンドのマニュアルページをテキストに出力したときの表示ズレを直す(man、col、>)

Linuxコマンドのマニュルをじっくり見るためにテキストで出力してみたら、
「cat」と表示されるはずが「ccccaaattttt」とか、
おかしな表示になっていた。

manコマンドをテキストで出力する(単純にリダイレクト)

man > cat.txt

「man」コマンドを、「cat.txt」という名前のテキストファイルに、
「>(リダイレクト)」する。

これで出力してみると、

NNAAMMEE
ccaatt -- concatenate and print files
(生成されたcat.txtから抜粋)

のように表示がおかしくなった。


これはマニュアルページの強調表示のためらしく、
その強調表示のコードを除去してやれば正常に表示される。
結論↓

man | col -b > cat2.txt

結果↓

NAME
cat -- concatenate and print files
(おなじく抜粋)

次回はcolコマンドの中身をみるところか・・・

XMLをCSVに変換したいときはXSLT

 

やはりあったXML変換

構造化されたデータを分解して一覧にするとか、
別のシステムに喰わせるために整形するとかで、
XML形式のデータをcsvに変換したいという要望がありました。

やったことなかったけど、なんかあるでしょと思ったらやはりあった。
qiita.com

 

xslt という方式を使います。
f:id:nikuniku9:20190226133315p:plain

 

XSLTとは

XSLTは、テンプレートファイルに沿ってXMLを処理するというものです。

今回はXMLCSVなので、項目ごとにカンマ付きのデータを生成し、

リダイレクトしてcsvファイルを作ります。

 

テンプレートファイルの作り方

XSLファイルを作成し、コマンドを打ちます。

csv.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" encoding="utf-8" />

  <xsl:param name="delim" select="','" />
  <xsl:param name="break" select="''" />

  <xsl:template match="/">
    <xsl:apply-templates select="root/as/a" />
  </xsl:template>

  <xsl:template match="a">
    <xsl:apply-templates />
    <xsl:value-of select="$break" />
      <xsl:text>
</xsl:text>
  </xsl:template>

  <xsl:template match="*">
    <xsl:value-of select="text()" />
    <xsl:if test="following-sibling::*">
      <xsl:value-of select="$delim" />
    </xsl:if>
  </xsl:template>

  <xsl:template match="text()" />
</xsl:stylesheet>
test.xml

<?xml version="1.0" encoding="utf-8"?>
<root>
  <path>/tmp</path>
  <as>
    <a>
      <name>1</name>
      <al>abc</al>
      <date>2008-01-01</date>
    </a>
    <a>
      <name>2</name>
      <al>efg</al>
      <date>2009-01-01</date>
    </a>
    <a>
      <name>3</name>
      <al>xyz</al>
      <date>2010-01-01</date>
    </a>
  </as>
</root>


上記のようにテンプレートファイル(.xsl)と元のファイル(.xml)を用意し、
コマンドを打つと結果が標準出力になります。


実行コマンド

xsltproc csv.xsl test.xml


結果

niku9:xmltest niku9$ xsltproc csv.xsl test.xml

1,abc,2008-01-01

2,efg,2009-01-01

3,xyz,2010-01-01

 

あとは使いやすいようファイルにリダイレクトしたりすれば良いです。

mysqlが再起動しなかったが、stop、startで解決した

mysqlに接続しようとしたら

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

と怒られた。

https://qiita.com/carotene4035/items/e00076fe3990b9178cc0

を参考にして、
サーバ再起動してみたり、
pidファイルを探しに行ったり、
tmp以下の権限を見てみたり、
したけども、いっこうにrestartが成功しない。

stopして、startすると成功した!

sudo mysql.server stop
sudo mysql.server start
→SUCCESS!

DBにも正常に接続できるようになったので一応解決。

なんでやねん!

ローカルリポジトリをつくる(Github→SourceTree)

SourceTree導入
GithubSSH接続してローカルに持ってくるまで
ちまちまつまずいたので、メモ

参考になったページ

teru0rc4.hatenablog.com

qiita.com

おおまかなながれ

SourceTreeDL、
SSHキーの作成、
ssh-addをしてなかったらエラーになった)
GithubSSHの設定をする、
Github登録&)
リポジトリをクローン、
ブランチを選択してクローン

→SourceTreeからGithubへのpush周り

スプレッドシートの値を集計したいとき、値が狂うので注意

2019/2/5追記

でも行追加(「1行を上に追加」とか)で自動的にコピーされたチェックボックスには、
値が入っていないから注意。

アップデートにより、自動的にコピーされたチェックボックスにも値が入るようになった。
さすが!

Googleスプレッドシートでチェックシートなどをつくるとき、
簡単にチェックボックスが使える。

スプレッドシートの[挿入]-[チェックボックス]

sf:id:nikuniku9:20180910120314p:plain

値が
☑️:TRUE
🔲:FALSE

で取得できるので、
COUNTIFなどで数えるとか数えないとか普通のことができる。
=COUNTIF(G5:G7,"TRUE")

でも行追加(「1行を上に追加」とか)で自動的にコピーされたチェックボックスには、
値が入っていないから注意。
→チェックはつけられるのにカウント数が狂うし、見た目でわからない。