列を整列させるためにgrepコマンドの出力形式を指定する方法はありますか?たとえば、
4TO/struct-2222332/coord-2222332.out: FINAL HEAT OF FORMATION = -299.61496 KCAL/MOL = -1253.58899 KJ/MOL
2E/struct-1212123/coord-1212123.out: FINAL HEAT OF FORMATION = -299.61496 KCAL/MOL = -1253.58901 KJ/MOL
OT4/struct-2222121/coord-2222121.out: FINAL HEAT OF FORMATION = -299.61497 KCAL/MOL = -1253.58904 KJ/MOL
E3/struct-1312322/coord-1312322.out: FINAL HEAT OF FORMATION = -299.61497 KCAL/MOL = -1253.58903 KJ/MOL
最初の列に40マスを割り当て、左からソートしたいです。同様に、各列の予想最大サイズに基づいて他の列にも同じことを行います。
答え1
このcolumn
コマンドを使用すると(Linuxを使用している場合)、データ型をタブ区切りの列として指定できます。しかし、最初の列と異なる列に異なる列幅を指定することはできないようです。
bash-[24]$ column -t /tmp/output
4TO/struct-2222332/coord-2222332.out: FINAL HEAT OF FORMATION = -299.61496 KCAL/MOL = -1253.58899 KJ/MOL
2E/struct-1212123/coord-1212123.out: FINAL HEAT OF FORMATION = -299.61496 KCAL/MOL = -1253.58901 KJ/MOL
OT4/struct-2222121/coord-2222121.out: FINAL HEAT OF FORMATION = -299.61497 KCAL/MOL = -1253.58904 KJ/MOL
E3/struct-1312322/coord-1312322.out: FINAL HEAT OF FORMATION = -299.61497 KCAL/MOL = -1253.58903 KJ/MOL
他のオプションは、ファイルを解析し、フィールドを分割し、awk
列を直接使用して処理することですprintf()
。
bash-[54]$ awk '{printf "%-40s",$1 ; $1=""; printf "%-s\n",$0}' /tmp/output
4TO/struct-2222332/coord-2222332.out: FINAL HEAT OF FORMATION = -299.61496 KCAL/MOL = -1253.58899 KJ/MOL
2E/struct-1212123/coord-1212123.out: FINAL HEAT OF FORMATION = -299.61496 KCAL/MOL = -1253.58901 KJ/MOL
OT4/struct-2222121/coord-2222121.out: FINAL HEAT OF FORMATION = -299.61497 KCAL/MOL = -1253.58904 KJ/MOL
E3/struct-1312322/coord-1312322.out: FINAL HEAT OF FORMATION = -299.61497 KCAL/MOL = -1253.58903 KJ/MOL