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

其中CrHfNTiN是文件夹名称。我的问题是右侧的值未正确对齐,因为文件夹具有不同的字符长度。更改文件夹名称是不可能的,因此我希望 xargs 命令始终使用一定数量的空格(例如 10 个)——至少作为最小值——以便垂直对齐是正确的。结果应该是这样的:

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" "{}"

请注意,这将使用 /usr/bin/printf,而不是 shell 的内置 printf。

相关内容