使用AWK将行和列排序在一起

时间:2017-11-17 09:10:21

标签: linux shell awk

我正在执行一项任务,我被要求查找特定大小和sha1sum之间的文件。我特别要求以下列格式提供输出:

文件名Sha1文件大小

全部在一条线上。我无法创建其他文件。

我尝试过以下方法:

for listed in $(find /my/output -type f -size -20000c):
do
sha1sum "$listed" | awk '{print $1}'
ls -l "$listed" | awk '{print $9 $5}'
done

给了我所需的输出字段,但不是所要求的格式,即

sha1sum
filename filesize

有人能提出一种方式,让我能够在一条线上获得所有这些吗?

谢谢:)

2 个答案:

答案 0 :(得分:1)

使用单一管道:

find /my/path-type f -size -20000c -printf "%s " -exec sha1sum {} \; | awk '{ print $3,$2,$1 }'

所需格式FILENAME SHA1 FILESIZE的示例输出(由于我的本地测试):

./GSE11111/GSE11111_RAW.tar 9ed615fcbcb0b771fcba1f2d2e0aef6d3f0f8a11 25446400
./artwork_tmp 3a43f1be6648cde0b30fecabc3fa795a6ae6d30a 40010166

答案 1 :(得分:1)

如果使用stat命令来避免需要解析ls的输出,则可以简单地回显所需的所有值:

while IFS= read -r -d '' listed
do
  echo "$listed" $(sha1sum "$listed") $(stat -c "%s" "$listed")
done < <(find /my/output -type f -size -20000c -print0)

检查您的stat版本,但上面是GNU。在OS X上,例如,

stat -f "%z" $listed