2015-10-04 158 views
0

我已將bash管道中的數據源從cat ${file}更改爲cat file_${part_number},因爲預處理導致${file}被截斷爲2GB,所以拆分輸出消除了預處理問題。然而,在測試這種變化時,我無法弄清楚如何讓Bash繼續爲我用來測試管道的一些基本操作採取相同的行動。Bash管道和Shell擴展

我原來的管道是:

cat giantfile.json | jq -c '.' | python postprocessor.py 

與原來的管道,如果我測試的變化postprocessor.py或預處理程序,我想只是測試我的變化有幾個項目從giantfile.json我可以使用headtail。像這樣:

cat giantfile.json | head -n 2 - | jq -c '.' | python postprocessor.py 
cat giantfile.json | tail -n 3 - | jq -c '.' | python postprocessor.py 

新管道修復該問題的預處理器:

cat file_*.json | jq -c '.' | python postprocessor.py 

這工作得很好,因爲每個文件都被輸出最終會。但是我不想等待每個測試5-10分鐘。我試着用頭部的前兩行輸入進行測試。

cat file_*.json | head -n 2 - | jq -c '.' | python postprocessor.py 

猛砸坐在那裏,遠遠超過它應該工作,所以我嘗試:

cat file_*.json | head -n 2 - | jq -c '.' 

而且我的問題是清楚的。 Bash正在輸出所有文件的內容,就好像磁頭不在那裏一樣,因爲每個文件現在都有1行數據。我從來沒有必要用bash來做這件事,而且我很尷尬。

爲什麼沒有擊行爲這種方式,和如何我重寫我的小bash命令管道的工作它曾經的樣子,讓我選擇的第一個/最後ñ線數據與測試工作?

回答

2

我的猜測是,當你將json分成單獨的文件時,你設法從每行的末尾刪除換行符,結果是連接文件(cat file_json.*)實際上只有一行,因爲cat不會在它連接的文件之間插入換行符。

如果這些文件實際上每行都帶有一個終止換行符,則通過head -n 2的管道應該正常工作。

您可以使用wc來檢查此假設,因爲該實用程序會計算換行符而不是行。如果它報告文件有0行,那麼你需要修復你的預處理。

+0

你釘了它。事實證明,我在預處理過程中有一個步驟,從它所處理的文件末尾剝離了直線。這不是隻有一個文件的問題。但是當它是每個文件的一行數據時會引起我的問​​題。 – Techdragon