簡體   English   中英

使用awk或bash在Unix中創建包含0字節的空多個文件?

[英]Create empty multiple files in Unix that contain 0 bytes using awk or bash?

我正在嘗試在Unix上創建多個空文件,但是我不知道AWK命令是否可以做到這一點,還是我必須在bash中做到這一點? 如果可以,可以幫我嗎?

現在,我使用以下命令:

seq 2 | awk '{print "" > "empty"i++".txt"}' i=1

但是,創建的每個文件都是1個字節。 有沒有一種方法可以使用awk或bash創建0字節文件?

怎么樣:

touch $(seq 2)

要么:

touch $(seq 2 | sed 's/$/.txt/')

如果要后綴?

如果該文件不存在, touch命令將創建一個文件。 因此,您可以執行以下操作:

for i in `seq 1 2`; do
    touch empty$i.txt
done

如果您不想使用任何其他命令(例如touch ,而僅使用bash命令來執行此操作,則可以使用重定向操作符>而不在其前面添加命令:

for i in `seq 1 2`; do
    > empty$i.txt
done

有關更多詳細信息,請參閱《 高級Bash腳本指南》中的“ I / O重定向”一章:

> filename    
   # The > truncates file "filename" to zero length.
   # If file not present, creates zero-length file (same effect as 'touch').
   # (Same result as ": >", above, but this does not work with some shells.)

如果您真的想在awk這樣做:

seq 2 | awk '{system(">" "empty" FNR ".txt")}'

但這不是很聰明,因為它為awk讀取的每一行創建了一個全新的過程。

因此@EdMorton的建議是可取的,因為他使用awk的內部printf而不是創建一個單獨的過程:

seq 2 | awk '{printf "" > "empty" NR ".txt"}'

您最好使用以下方法:

touch {1..2}.txt

僅創建一個過程。 但是,這不會將您可能擁有的任何現有文件的大小減小到零-我通常不希望人們不願意丟失數據,除非他們在問題中明確表示。

awk命令確實可以自行創建空文件,而無需在system()產生任何東西:

$ awk 'BEGIN{ printf("") > "test1" }'
$ ls -l test1
-rw-r--r--  1 ghoti  staff  0 Jan  9 09:58 test1
$

請注意,每個輸出文件在使用時都會記錄在內存中,並且直到關閉輸出文件后才會將內存歸還。 您可以使用close()函數關閉文件。

awk -v n=2 'BEGIN{ for(;n;n--) { f="test"n".txt"; printf("") > f; close(f) } }'

但是您絕對不需要 awk,這種touch可以在多個shell(當然包括bash)中很好地工作,並且用於生成文件名的機制多種多樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM