列出所有 .txt 檔案並計算列數

列出所有 .txt 檔案並計算列數

如何列出目錄中的所有 .txt 檔案(管道分隔檔案)以及每個檔案的列數?

答案1

find . -name '*.txt' -type f -size +0 -exec awk -F '|' '
  FNR == 1 {print FILENAME ": " NF; nextfile}' {} +

會印類似的東西

./dir/foo.txt: 2

.txt對於名稱以where結尾的每個常規非空文件,其中 是文件第一行中分隔欄位"2"的數量。|

請注意,nextfile並非在所有實作中都可用awk,但在不可用的實作中,它應該是無害的(只是效率較低,因為awk 完全讀取檔案)。

如果您只想考慮所有非空白行中具有相同列數的文件,請使用 GNU awk

find . -name '*.txt' -type f -size +0 -exec awk -F '|' '
  BEGINFILE {n = 0}
  NF {
    if (n && NF != n) {
      print "skipping "FILENAME" ("NF" != "n")" > "/dev/stderr"
      n = 0; nextfile
    }
    n = NF
  }
  ENDFILE {if (n) print FILENAME ": " n}' {} +

答案2

另一種方法適用於任何awk執行:

find . -type f -name "*.txt" -exec awk -F'|' 'NF{ print FILENAME,NF; exit }' {} \;

  • -F'|'-|視為欄位分隔符
  • NF{ ... }- 確保文件中至少有一個欄位/列。NF本身指向列數

答案3

find . -name "*.txt" -type f -exec wc -l {} \;

答案4

您的問題不是很清楚,但您可以嘗試此命令: find DIRECTORY -name "*.txt" | xargs awk -F "SEPARATOR" "{print FILENAME, NF }" 只需將DIRECTORYand替換SEPARATOR為您的目錄和列分隔符號。

相關內容