1. ホーム
  2. shell

[解決済み] Unix コマンドラインでの簡潔で移植性の高い「join」。

2023-06-19 15:21:12

質問

複数の行を一行に結合し、改行文字があった場所に区切り文字を置き、末尾の区切り文字を避け、オプションで空行を無視するにはどうしたらよいでしょうか。

例 テキストファイルを考えてみましょう。 foo.txt という、3行のテキストファイルがあるとします。

foo
bar
baz

希望する出力は

foo,bar,baz

今使っているコマンド。

tr '\n' ',' <foo.txt |sed 's/,$//g'

理想的にはこのような感じです。

cat foo.txt |join ,

何が。

  1. 最も移植性が高く、簡潔で読みやすい方法です。
  2. 非標準の unix ツールを使用した、最も簡潔な方法です。

もちろん、私は何かを書いたり、エイリアスを使ったりすることができます。しかし、私は選択肢を知ることに興味があります。

どのように解決するのですか?

ちょっと意外かもしれません。 paste はこれを行う良い方法です。

paste -s -d","

この方法では、あなたが言ったような空行は扱えません。その場合は、テキストをパイプで grep に、まず通します。

grep -v '^$' | paste -s -d"," -