xargs出力の垂直位置合わせ

xargs出力の垂直位置合わせ

複数のサブディレクトリにあるファイルから特定の値を抽出したいと思います。これを行うための作業コードがあります。

for i in */; do grep "free energy" "$i"filename | tail -1 | xargs -I{} echo "$i: {}" >> output.txt; done

このtail -1コマンドは各ファイル(必要なもの)の最後の出力を提供し、xargs設定はフォルダ名の前にフォルダ名を追加するので、どの行がどのシステムに属しているかがわかります。出力.txtは次のようになります。

Cr/: free energy TOTEN = -18.87487583 eV Hf/: free energy TOTEN = -18.76845679 eV N/: free energy TOTEN = -15.90748159 eV Nb/: free energy TOTEN = -20.38801759 eV Ti/: free energy TOTEN = -14.92233353 eV TiN/: free energy TOTEN = -78.73147048 eV

そのうちCr、などはHfフォルダ名です。私の問題は、フォルダの文字長が異なるため、右側の値が正しくソートされないことです。フォルダ名を変更することはできないので、垂直方向の並べ替えを正確にするために、xargsコマンドに常に特定の数(たとえば10)の空白(最小最小)を使用させたいと思います。結果は次のようになります。NTiN

Cr/ : free energy TOTEN = -18.87487583 eV Hf/ : free energy TOTEN = -18.76845679 eV N/ : free energy TOTEN = -15.90748159 eV Nb/ : free energy TOTEN = -20.38801759 eV Ti/ : free energy TOTEN = -14.92233353 eV TiN/: free energy TOTEN = -78.73147048 eV

またはこれ

Cr /: free energy TOTEN = -18.87487583 eV Hf /: free energy TOTEN = -18.76845679 eV N /: free energy TOTEN = -15.90748159 eV Nb /: free energy TOTEN = -20.38801759 eV Ti /: free energy TOTEN = -14.92233353 eV TiN/: free energy TOTEN = -78.73147048 eV

これにより、Alt+を使用してすべての値を一度に簡単にコピーできますLeftclick

答え1

printfただあなたが欲しいもの

xargs -I{} printf "%-10s: %s\n" "$i" "{}"

これは、シェルの組み込みprintfではなく/usr/bin/printfを使用することに注意してください。

関連情報