Command-Line
在具有相同副檔名的多個文件的模式中讀取最後一行的最快方法
我在一個目錄中
/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
for
loop + :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