Text-Processing

製作目錄中文件數量的 nicely 格式列表 - 可能是 awk 和 sed

  • June 28, 2017

我在一系列目錄中有很多很多文件,並且想要一個格式很好的列表,列出每個目錄中有多少文件。

目錄的順序如下:父目錄名為 A、B、… H、I。在每個目錄下,有​​ 1 到 7 個目錄,分別命名為 001、002、… 007。在這些目錄中,文件 I’想要一個文件計數。

我所希望的,是這樣的:

...
C/003 122
C/004 45
C/005 462
D/001 215
電子/001 98
電子/002 323
...

我正在考慮目錄名稱和計數之間的選項卡。計數是左對齊還是右對齊都沒有關係。

我自己做的基本上是這樣的:

(對於我在 */*
做
迴聲 >>> $i"
ls "$i" | 廁所
完成) > file_count

結果是這樣的:

...
>>> F/002
30 30 234
>>> F/003
120 120 1322
>>> G/001
78 78 620
...

顯然,還不錯……如果我用“>>>”替換wcwc -l刪除它會更好 -除了每個“記錄”將超過兩行而不是一行。

所以我需要的是一些awksed(或其他任何東西- 有沒有比這兩條線更簡單的工具來連接兩條線?)魔術將兩條線和兩條線連接成一條線。

但是,如果有一種更直接的方法(shell-script、perl、python、一些非常黑暗的sed 和 awk 魔法)可以“一次性”列出一個列表,那就更好了……

假設您的文件名不包含換行符並且您grep支持 -o 選項:

find [[:upper:]] -type f | grep -Eo '^./[0-9]{3}' | sort | uniq -c

您可以為每個目錄分別建構一個文件數組,然後只計算元素的數量。那bash會是這樣的

for dir in */*/; do a=( "$dir"/* ); printf "%s\t%s\n" "$dir:" "${#a[@]}"; done

如果A/001etc. 也包含您想要包含的內容的目錄,則添加**glob:

shopt -s globstar
for dir in */*/; do a=( "$dir"/**/* ); printf "%s\t%s\n" "$dir:" "${#a[@]}"; done

引用自:https://unix.stackexchange.com/questions/226104