将2个linux命令的输出合并为一个输出

时间:2016-01-07 15:30:29

标签: linux command-line

在linux中有任何方法可以显示2个不同命令的输出,这些命令引用相同的对象,但在没有脚本的情况下以隔行格式提供不同的数据。

解释我的意思当我说隔行扫描格式时请考虑以下内容。

ls --full-time 

将显示当前目录中每个子文件夹的完整时间戳和文件夹名称。

du -sh ./*

将显示当前目录中每个子文件夹的总大小和名称。

如果我要运行一个命令,然后运行另一个命令,我会在各自的行上获得所有大小,每个大小旁边都有一个文件夹名称,然后我会得到所有日期,每个日期都附带一个文件夹名称他们自己的路线。

通过"隔行扫描"我的意思是每个命令的第一个输出输出,最好是在一行上。然后,每个命令的第二行输出以相同的方式呈现(ect)。 I.E将显示所有这些数据,以便每个文件夹的日期,大小和名称都出现在同一行,尽管并非所有这些数据都是由同一命令提供的。 (我不介意文件夹名称是否显示两次,因为这两个命令都提供了这一点。)

1 个答案:

答案 0 :(得分:1)

TL; TR :以下命令仅显示如何将join命令与上述输入一起使用。可以通过以下方式实现以人类可读格式显示文件大小以及其他ls输出值的个别任务:

ls --full-time -lh

请注意-h

您可以将join命令与process substitution一起使用:

join -1 2 -2 9  <(du -sh *) <(ls --full-time)

如果你想要一个漂亮的对齐输出,你可以将它传递给column命令:

join -1 2 -2 9  <(du -sh *) <(ls --full-time) | column -t

我正在加入du输出的第2列和ls输出的第9列,即文件名。亲自尝试一下。

示例:

假设您的文件夹包含1.txt2.txt3.txt文件。输出看起来像这样:

1.txt  -rw-rw-r--  1  jdoe  jdoe  34000     2016-01-07  17:08:04.017093659  +0100  36K
2.txt  -rw-rw-r--  1  jdoe  jdoe  4000      2016-01-07  17:08:18.353301052  +0100  4,0K
3.txt  -rw-rw-r--  1  jdoe  jdoe  34335000  2016-01-07  17:08:25.293401318  +0100  33M