Command-Line

在具有相同副檔名的多個文件的模式中讀取最後一行的最快方法

  • January 11, 2015

我在一個目錄中/home/files/有一些文件都具有相同的副檔名.txt

例如

1.txt
2.txt
3.txt
4.txt
5.txt
test.txt

這些文件的數據格式都相同,但數據不同。所有這些文件中至少包含以下行

frames=[number here]

此行在文件中出現多次,因此我需要獲取frames=文件中最後出現的值。

正如我所說,我想從上述所有與目錄中副檔名 .txt 匹配的文件中獲取該行(不需要遞歸)。

是否有任何單個 bash 命令可以做到這一點?

編輯

預期輸出:

1.txt=5000
2.txt=123
3.txt=3452
4.txt=111
5.txt=958
test.txt=1231

find+ grep

find . -name '*.txt' -exec sh -c 'grep -HPo "frames=\K.*" "$0" | tail -n1' {} \;

並以類似的方式使用 shell forloop + :grep

for file in *.txt; do grep -HPo 'frames=\K.*' "$file" | tail -n1; done

使用gawk並假設只有一個=線上,您可以執行以下操作:

gawk -F= 'ENDFILE { print FILENAME"="$2 }' *.txt

更新

剛剛意識到我誤讀了這個問題,我認為您要查找的行始終是最後一行。要使用以 , 開頭的最後一行,frames=gawk執行以下操作:

gawk -F= '/^frames=/ { frames=$2 } ENDFILE { print FILENAME"="frames }' *.txt

或任何awk

for file in *.txt; do
 awk -F= '/^frames=/ { frames=$2 } END { print FILENAME"="frames }' "$file"
done

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