让我们说我想在单行命令中创建file1.txt,file2.txt ... file9.txt,并在所有命令中都写入字符串“ TEST”。我不想用于循环。我想写一个表达式,将其扩展为:
echo "TEST" > file1.txt ; echo "TEST" > file2.txt ; ... ; echo "TEST" > file9.txt ;
如果我写echo "TEST" > file{0..9}.txt
,它将不起作用,因为它只会在右侧扩展。对于每个单独的文件,是否可以以及如何使它与结尾的;
一起重复整个命令?
答案 0 :(得分:4)
使用awk
,您可以轻松地做到这一点:
awk '{print "TEST" > $1; close($1)}' <(printf '%s\n' file{0..9}.txt)
或者,使用printf | xargs
:
printf '%s\n' file{0..9}.txt | xargs -I % bash -c 'echo "TEST" > "$1"' - %
awk
解决方案是首选,因为它不会为每个文件生成bash
。
答案 1 :(得分:4)
要将相同的内容写入许多文件,可以使用tee
命令。提供文件名作为参数,提供标准输入的内容,并丢弃输出:
$ tee <<<'TEST' file{1..9}.txt >/dev/null
$ more *| cat
::::::::::::::
file1.txt
::::::::::::::
TEST
::::::::::::::
file2.txt
::::::::::::::
TEST
::::::::::::::
file3.txt
::::::::::::::
TEST
::::::::::::::
file4.txt
::::::::::::::
TEST
::::::::::::::
file5.txt
::::::::::::::
TEST
::::::::::::::
file6.txt
::::::::::::::
TEST
::::::::::::::
file7.txt
::::::::::::::
TEST
::::::::::::::
file8.txt
::::::::::::::
TEST
::::::::::::::
file9.txt
::::::::::::::
TEST
答案 2 :(得分:0)
请您尝试以下。
awk 'BEGIN{while(++i<=10){close("file"count".txt");print "TEST" > "file"++count".txt"}}'
以上代码的解释: 以点的形式添加了以上代码的说明。
我们没有读取awk
命令的任何输入。 BEGIN
命令的awk
部分将在将任何Input_file赋予awk
之前执行。
然后在BEGIN
部分中,我正在运行一个while
循环,该循环从i=1
的值一直到i=10
的值。
内部循环中,我首先检查是否打开了名为filecount.txt
的输出文件,然后将其关闭。由于我们仅制作10个输出文件,因此此时将不会出现错误,但是如果您要创建N个.txt输出文件,则可以避免出现错误“打开的文件太多”这个close
。
现在打印是我将字符串TEST
打印到文件名file
(字符串)count
(一种变量,其值每次增加1的变量)的地方.txt
(一个字符串)。
答案 3 :(得分:0)
使用 GNU并行,无循环且并行:
parallel 'echo TEST > file{}' ::: {1..9}