yukashima huksay Asked: 2018-01-11 22:12:57 +0800 CST2018-01-11 22:12:57 +0800 CST 2018-01-11 22:12:57 +0800 CST 如何在其他两列输出之间插入一列? 772 请注意,我知道这一点和这一点,但他们没有帮助我。 我想组合两个命令的输出。 ls -1sh 和 wc -l 所以我可以做类似的事情: <combined command> o.img 1.img 1512 412K 0.png 1269 320K 1.png 2781 732K total 还有一个小问题是 ls 不包括大小的总和。 text-processing columns 2 个回答 Voted Best Answer Archemar 2018-01-12T03:03:34+08:002018-01-12T03:03:34+08:00 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告诉 join 使用字段 2 进行匹配 -o 1.1,2.1,2.2打印指定的fileld 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,但这应该可以。 tgwtdt 2018-01-11T22:27:12+08:002018-01-11T22:27:12+08:00 首先,您必须使用以下功能解决不包括总数的 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并加载它。 之后,您必须合并输出。有多种方法可以做到这一点。这是一个:首先,您将所有输出与粘贴相结合。不幸的是 paste 只接受文件作为参数,但您可以使用命名管道来处理: 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 }
ls
不会产生总数,但du
可以wc
将产生一个总然后简单地
join
在哪里
-j 2
告诉 join 使用字段 2 进行匹配-o 1.1,2.1,2.2
打印指定的fileld FILENUM.FIELDNUM或者,您可以使用额外的 awk 来漂亮的格式
PS:我没有使用任何
*.png
东西*.csv
,但这应该可以。首先,您必须使用以下功能解决不包括总数的 ls 问题:
你可以把它放在你的
.bashrc
并加载它。之后,您必须合并输出。有多种方法可以做到这一点。这是一个:首先,您将所有输出与粘贴相结合。不幸的是 paste 只接受文件作为参数,但您可以使用命名管道来处理:
你可以把这个功能放在你的
.bashrc
现在。我对它们进行了排序,因为我认为这是模式可读的。| sort
如果您不想对它们进行排序,您可以删除它们。如果您不想使用额外的功能,您可以执行以下操作: