他の2つの出力列の間に列を挿入するには?

他の2つの出力列の間に列を挿入するには?

知っておいてくださいこれそしてこれしかし、彼らは私を助けませんでした。

両方のコマンドの出力をマージしたいと思います。

ls -1sh

そして

wc -l

だから私は次のようにすることができます:

<combined command> o.img 1.img
  1512 412K 0.png
  1269 320K 1.png
  2781 732K total

もう一つの小さな問題は、lsがサイズの合計を含まないことです。

答え1

ls合計を生成しませduんが、

du -sch *.csv
16K     LdevInfo.csv
8.0K    LunInfo.csv
4.0K    W.csv
4.0K    WwnInfo.csv
32K     total

wc銃を生産します

 wc -l *.csv
  101 LdevInfo.csv
   66 LunInfo.csv
   62 W.csv
    8 WwnInfo.csv
  237 total

それから単にjoin

join -j 2 -o 1.1,2.1,2.2 v w
101 16K LdevInfo.csv
66 8.0K LunInfo.csv
62 4.0K W.csv
8 4.0K WwnInfo.csv
237 32K total

どこ

  • -j 2一致のためにフィールド2を使用するように結合に指示する
  • -o 1.1,2.1,2.2指定されたファイル FILENUM.FIELDNUM を印刷します。

あるいは、追加のawkを使用してフォーマットを素敵に指定することもできます。

join -j 2  v w| awk '{printf "%s\t%s\t%s\n",$2,$3,$1}'
101     16K     LdevInfo.csv
66      8.0K    LunInfo.csv
62      4.0K    W.csv
8       4.0K    WwnInfo.csv
237     32K     total

PS:私は*.pngそれを使用していませんが、*.csvこれはうまくいきます。

答え2

まず、次の関数を使用して、lsに合計が含まれない問題を解決する必要があります。

myls() {
    if [ $# -gt 1 ] ; then
        ls -1sh "$@"
        ls -1s "$@" | cut -d' ' -f1 | awk '{s+=$1} END {print s}' | numfmt --to=iec --suffix=' total'
    else
        ls -1sh "$1"
    fi
}

.bashrc本人が直接入れてロードしてください。

その後、出力をマージする必要があります。これを行う方法はいくつかあります。以下は一つです。まず、すべての出力を貼り付けと組み合わせます。残念ながら、貼り付けはファイルを引数としてのみ許可しますが、名前付きパイプを使用してそれを処理できます。

combined() {
    paste <(wc -l "$@") <(myls "$@") | awk '{print $1, $3, $4}' | sort
}

この関数を今すぐ入れることができます.bashrc。スキーマが読めると思ったので並べ替えました。| sortソートしたくない場合は削除できます。

アドインを無効にするには、次の手順を実行します。

myd() {
    if [ $# -gt 1 ] ; then
        tmp=`ls -1sh "$@";ls -1s "$@" | cut -d' ' -f1 | awk '{s+=$1} END {print s}' | numfmt --to=iec --suffix=' total'`
    else
        tmp=`ls -1sh "$1"`
    fi
    paste <(wc -l "$@") <(echo "$tmp") | awk '{print $1, $3, $4}' | sort
}

関連情報