Linux 在Unix中使用awk或bash创建包含0字节的多个空文件?

Linux 在Unix中使用awk或bash创建包含0字节的多个空文件?,linux,bash,shell,unix,awk,Linux,Bash,Shell,Unix,Awk,我试图在Unix上创建多个空文件,但我不知道AWK命令是否可以这样做,或者我必须在bash中这样做?如果是的话,你能帮我吗 此时,我使用以下命令: seq 2 | awk '{print "" > "empty"i++".txt"}' i=1 但是,创建的每个文件都是1字节。有没有办法使用awk或bash创建0字节的文件?如果文件不存在,则touch命令将创建一个文件。所以你可以做: for i in `seq 1 2`; do touch empty$i.txt done 如

我试图在Unix上创建多个空文件,但我不知道AWK命令是否可以这样做,或者我必须在bash中这样做?如果是的话,你能帮我吗

此时,我使用以下命令:

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

但是,创建的每个文件都是1字节。有没有办法使用awk或bash创建0字节的文件?

如果文件不存在,则
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
有关更多详细信息,请参阅中的章节:

那么:

touch $(seq 2)
或:


如果您想要一个后缀?

如果您真的想在
awk
中使用后缀:

seq 2 | awk '{system(">" "empty" FNR ".txt")}'
但这并不聪明,因为它为
awk
读取的每一行创建了一个全新的过程

@因此,EdMorton的建议更可取,因为他使用了
awk
的内部
printf
,而不是创建一个单独的流程:

seq 2 | awk '{printf "" > "empty" NR ".txt"}'
您最好使用以下方法:

touch {1..2}.txt

它只创建一个进程。但是,这不会将您可能拥有的任何预先存在的文件的大小减少到零-我通常不想假设人们乐于丢失数据,除非他们在问题中明确地这样说。

awk命令确实可以自己创建空文件,而不会在
系统()中产生任何东西。

请注意,每个输出文件在使用时都记录在内存中,在关闭输出文件之前不会返回内存。您可以使用
close()
函数关闭文件

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

但是你根本不需要awk,touch可以从多个shell(当然包括bash)中很好地工作,并且你用来为它生成文件名的机制是多种多样的。

或者touch$(sed's/$/.txt/'| sed's/^/empty/')给他所要求的格式$(seq 2 | sed's/*/empty&.txt/')以消除额外的sed,甚至
touch$(seq-f'empty%.0f.txt'2)
?为什么要使用sed?
touch{1..2}.txt
是IMO迄今为止最好的答案!一个进程,它实现了公约中要求的零字节大小文件的最终目标。+1您也可以尝试:
seq 2 | awk'{printf'>“empty”NR.txt}“
。正如其他地方指出的,
touch
不能保证文件是空的。如果确实使用了
touch
,您可能需要测试是否有任何文件名已经对应于(非空)文件。。。
touch {1..2}.txt
$ awk 'BEGIN{ printf("") > "test1" }'
$ ls -l test1
-rw-r--r--  1 ghoti  staff  0 Jan  9 09:58 test1
$
awk -v n=2 'BEGIN{ for(;n;n--) { f="test"n".txt"; printf("") > f; close(f) } }'