列(1)は空の先行セルを除去する。修正できますか?

列(1)は空の先行セルを除去する。修正できますか?

この使い方を考えてくださいコラム(1):

column -s, -t <<CSV
a,b,c
,ee,ff
CSV

上記のコードスニペットは以下をエクスポートします。

a   b   c
ee  ff

しかし、私は次のようなものを見ることを期待しています。

a   b   c
    ee  ff

column2行目から先行スペース「セル」が削除されているようですが、私はそれを期待して維持したいと思います。

列の空白除去動作を無効にする方法はありますか?標準/推奨回避策提案がありますか?

使ってみようRS(1)しかし、このコマンドについて他に質問があります。rs(1) は、すべての出力を 1 行に出力します。入力配列の外観をコピーする方法は?

答え1

使用幸せ(以前のPerl_6)

Rakuのモジュールが利用可能ですText::CSV。このモジュールはRFC-4180(およびRFC-4180 / RFC-7111)に準拠したファイルを出力します。言うまでもなく、空の先行セルは保存されます。以下に、さまざまな列区切り記号(タブ)を使用した出力デモを示します。

~$ raku -MText::CSV -e 'my @a = csv(in => $*IN); csv(in => @a, out => $*OUT, sep => "\t");'  file

入力例:

a,b,c
,ee,ff

出力例(タブ区切り):

a   b   c
    ee  ff

ファイルが大きい場合やCSVファイルを1行ずつ読みたい場合は、下記のリンクをご覧ください。

https://unix.stackexchange.com/a/722776/227738 https://github.com/Tux/CSV/blob/master/doc/Text-CSV.pdf
https://raku.org

答え2

このcolumnユーティリティは、各行の先頭と末尾から空の列を削除します。これにより、観測される列が誤ってソートされます。ユーティリティには、この動作を無効にするオプションはありません。

一般的なCSV文書を別の形式(TSVなど)に変換する場合は、MillerなどのCSV認識ツールを使用する方が安全です。

$ mlr --icsv --otsv cat <<END_DATA
a,b,c,"d,e"
,ee,ff,"ok ""hello"""
END_DATA
a       b       c       d,e
        ee      ff      "ok ""hello"""
$ mlr --icsv --opprint cat <<END_DATA
a,b,c,"d,e"
,ee,ff,"ok ""hello"""
END_DATA
a b  c  d,e
- ee ff ok "hello"
$ mlr --icsv --opprint --barred cat <<END_DATA
a,b,c,"d,e"
,ee,ff,"ok ""hello"""
END_DATA
+---+----+----+------------+
| a | b  | c  | d,e        |
+---+----+----+------------+
| - | ee | ff | ok "hello" |
+---+----+----+------------+

答え3

「非標準」ツールが大丈夫なら、XSVツールキット多少ランダムに区切られたテキストデータの形式を適切に指定できます。

xsv table <<CSV
a,b,c
,ee,ff
CSV
a   b   c
    ee  ff

答え4

データは引用符や改行のない「簡単なCSV」なので、カンマは区切りフィールドにのみ表示され、それを使用して目的のawk効果を得ることができます。

awk -F, 'BEGIN {OFS="\t"} {$1=$1; print}' <<CSV
a,b,c
,ee,ff
CSV

出力

a       b       c
        ee      ff

関連情報