Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 如何使用更多文件作为输入?_Awk - Fatal编程技术网

Awk 如何使用更多文件作为输入?

Awk 如何使用更多文件作为输入?,awk,Awk,请问这个文件有什么问题?我想把最少70个文件打印成最少70个文件。谢谢 awk 'BEGIN{a=100000}{if ($1<0+a) a=$1} END{print a}' file[01-70].asc > min 你能试试下面的吗 awk '{min=min<=$1?(min!=""?min:$1):$1} END{print min}' file{01..70}.asc 有许多方法可以列出01到70之间的文件,但[01-70]不是其中之一。考虑: $ echo f

请问这个文件有什么问题?我想把最少70个文件打印成最少70个文件。谢谢

awk 'BEGIN{a=100000}{if ($1<0+a) a=$1} END{print a}' file[01-70].asc > min

你能试试下面的吗

awk '{min=min<=$1?(min!=""?min:$1):$1} END{print min}' file{01..70}.asc

有许多方法可以列出01到70之间的文件,但[01-70]不是其中之一。考虑:

$ echo file{01..10}.asc
file1.asc file2.asc file3.asc file4.asc file5.asc file6.asc file7.asc file8.asc file9.asc file10.asc
$ for i in $(seq -w 10); do touch file$i.asc; done
$ ls 
file01.asc  file02.asc  file03.asc  file04.asc  file05.asc  file06.asc  file07.asc  file08.asc  file09.asc  file10.asc
$ ls file*.asc
file01.asc  file02.asc  file03.asc  file04.asc  file05.asc  file06.asc  file07.asc  file08.asc  file09.asc  file10.asc
$ ls file{10,0{1..9}}.asc
file01.asc  file02.asc  file03.asc  file04.asc  file05.asc  file06.asc  file07.asc  file08.asc  file09.asc  file10.asc
$ ls file[01-10].asc
ls: file[01-10].asc: No such file or directory
$ echo file[01-10].asc
file[01-10].asc
简而言之,您可能只想使用awk。。。文件0{1..9}.asc文件{10..70}.asc或文件[01234567][0123456789].asc或文件[01234567][[:digit:][].asc,但您可以简单地使用文件*.asc

正确的做法是像我写的那样使用END而不是ENDFILE,所以OPs解决方案应该可以工作

cat f1
10
1

cat f2
20
2

cat f3
30
3
ENDFILE在每个文件的末尾运行
读取所有文件后运行END。

您的意思是70个文件中的最小值为$1,对吗?如果是这样的话,那你为什么要将它们与a=100000进行比较呢?你的问题看起来就像是你把车交给了一个机械师,然后说这辆车出了什么问题?我想开车去上班,而不是告诉你的机修工你的车有什么问题导致你把车给她。告诉我们您有哪些问题存在错误输出、无输出、错误消息、内核转储等,并提供简明、可测试的示例输入和预期输出,可用于重现您的问题并针对潜在解决方案进行测试。awk:fatal:无法打开文件[01-70].asc'表示不读取此类文件或目录`文件的名称为file00001、file00002。。。。。file00010…@Arrara,请尝试一下我编辑的代码,让我知道我已将其更改为文件{01..70}.asc。谢谢,它可以工作,如何从每个文件打印最小值?我的意思是,输入将是70行。@Arrara,在我的代码中更改END到ENDFILE,然后让我知道?我正在浏览Ubuntu GNU awk 4.1版本的man awk,发现如下内容。BEGINFILE和ENDFILE是附加的特殊模式,其主体在读取每个命令行输入文件的第一条记录之前和读取每个文件的最后一条记录之后执行。即使我使用示例文件进行了测试,它也会在每个文件结束后使用ENDFILE打印最小数量的文件。如果我遗漏了什么,我很抱歉,只是想澄清一下。@RavinderSingh13我确实看到了一个错误,并更新了我的帖子。在bash中,您可以使用文件{0001..0070}.asc格式化前导零。在bash 4中,该扩展可以工作,但在3.2中不行:
cat f1
10
1

cat f2
20
2

cat f3
30
3
awk '{f+=$1} ENDFILE {print FILENAME,"ENDFILE="f} END {print "All file END="f}' f[1-3]
f1 ENDFILE=11
f2 ENDFILE=33
f3 ENDFILE=66
All file END=66