[英]cat and grep from multiple files in python and write output to a file?
[英]How to cat contents of multiple files from a python script
我想對從cat
腳本生成的文件的內容進行分類。 是否可以在一個簡單的單行命令中做到這一點? 例如,我想要類似的東西:
cat <(python test.py) # doesnt work as I want to
其中 test.py 產生多個像這樣的文件名(由新行分隔)
file1.txt
file2.txt
file3.txt
我想基本上做
cat file1.txt
cat file2.txt
cat file3.txt
基本上是讀取腳本產生的文件名的內容。 假設 python 腳本可以生成數百/數千個文件名。
盡管這似乎可行
cat $(python test.py)
但問題是它似乎要等到整個python test.py
完成后,才能執行任何cat
。 基本上,它似乎不會在獲得文件名后立即捕獲文件名的內容。 然而
cat <(python test.py)
cat
獲取文件名,不幸的是,它只打印文件名而不是文件名的內容。
你可以使用sed
$ sed 's/^/cat /e' <(python3 test.py)
這將在執行命令之前在每個文件名前添加cat
。
^
- 這會將查找錨定到每行的開頭
cat
- cat 將替換每行開頭的錨點
e
- 這告訴 sed 執行由替換產生的命令,在本例中為cat file1.txt
我認為您需要在腳本中使用這些文件創建 STDOUT:
例如test.py
import os
for i in range(0,5):
name="file" + str(i) +".txt"
f = open(name, "a")
f.write("Hello\n")
f.close()
print(name)
像這樣的東西:
$ python test.py
file0.txt
file1.txt
file2.txt
file3.txt
file4.txt
$ cat $(python test.py)
Hello
Hello
Hello
Hello
Hello
如果你想讓貓在飛行中工作,這並不是那么簡單,因為在單行 bash 中我們必須等待前面的命令完成。 但是你可以嘗試做這樣的事情:
$ python test.py > /dev/null &
$ watch -n60 'find ./ -maxdepth 1 -type f -mmin -1 -exec cat {} \;'
除了使用sed
,如本答案所示,您應該考慮xargs
:
python3 test.py | xargs -i cat "{}"
這比cat
更強大,因為與sed
解決方案不同,它適用於許多非常規字符,例如'*'
、 '?'
, 和' '
(但不是'\n'
)。
對您的 python 腳本稍作更改,使其與帶有'\n'
字符的文件名也能正常工作是微不足道的。 python 腳本中的更改將使用'\0'
而不是'\n'
來分隔文件名(確保在每個此類文件名之后刷新標准輸出)。 然后將xargs
與-0
參數一起使用:
python3 test.py | xargs -0 -i cat "{}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.