2017-10-09 70 views
1

我有每小時運行的腳本,我存儲的故障數據如下:將目錄內的多個文本文件(包括子目錄)連接成Bash中的單個文件?

2017/10/09/00/RetryFailure.txt 
2017/10/09/01/RetryFailure.txt 
2017/10/09/02/RetryFailure.txt ... 

其中10月,09天及00,01,02是小時。現在在這一天結束時,我想將所有(24)RetryFailure.txt連接成一個文件,並說RetryFailure10.txt。

任何人都可以告訴我這樣做的命令嗎?

回答

1
cat 2017/10/*/RetryFailure.txt > concat_file 

或更多的限制的新文件

cat 2017/10/{00..23}/RetryFailure.txt > concat_file 
+0

同樣的問題,它會創建一個文件,而不是每個日期的文件。 – anubhava

+0

我正在考慮以這種方式存儲,但現在我意識到它適用於我的用例。 –

+0

它是一個按日期排列的文件,具體取決於concat_file的選擇是否允許給用戶,可能會令人困惑的是,只有一年和一天都沒有月(?)? –

2

您可以使用此find用於集合所有同一日期的文件:使用與進程替換循環

find . -name 'RetryFailure.txt' -exec bash -c \ 
'IFS=/ read -ra arr <<< "$1"; cat "$1" >> "RetryFailure${arr[2]}.txt"' - {} \; 

爲了獲得更好的性能:

while IFS= read -rd '' file; do 
    IFS=/ read -ra arr <<< "$file" 
    cat "$file" >> "RetryFailure${arr[2]}.txt" 
done < <(find . -name 'RetryFailure.txt' -print0) 
  • 使用find我們發現每個RetryFailure.txt文件
  • 使用read -raIFS=/我們通過/分割的每個條目並填充殼陣列
  • 陣列的第二元素是數據數
  • 使用cat ...命令我們每一個文件重定向到使用${arr[2]}
+0

什麼是編曲?還可以詳細說明一下嗎? –

+1

'arr'我們的shell數組,通過使用'/'作爲字段分隔符的'read -ra'命令來填充。 – anubhava

+0

@KeshavTaparia:這是否工作? – anubhava

1

find + cat方法:

find . -type f -name RetryFailure.txt -exec cat {} + > RetryFailure_merged.txt 
相關問題