Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/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
从文件执行bash循环脚本_Bash_Unix_While Loop_Grep_Echo - Fatal编程技术网

从文件执行bash循环脚本

从文件执行bash循环脚本,bash,unix,while-loop,grep,echo,Bash,Unix,While Loop,Grep,Echo,我试图在unix中执行此操作。比如说,我有五个以日期命名的文件,每个文件中都有上千个数值(六到十位数)。现在,让我们假设我也有一堆数值,我想知道哪个值属于哪个文件。我正试图像下面这样艰难地做,但我如何把我所有的值放在一个文件中,然后从那里做一个循环 档案: 20170101 20170102 20170103 20170104 20170105 代码: 将值放入文件numbers.txt中,然后执行以下操作: for i in $(cat numbers.txt); do ... do

我试图在unix中执行此操作。比如说,我有五个以日期命名的文件,每个文件中都有上千个数值(六到十位数)。现在,让我们假设我也有一堆数值,我想知道哪个值属于哪个文件。我正试图像下面这样艰难地做,但我如何把我所有的值放在一个文件中,然后从那里做一个循环

档案:

20170101
20170102
20170103
20170104
20170105
代码:


将值放入文件
numbers.txt
中,然后执行以下操作:

for i in $(cat numbers.txt); do
    ...
done

将值放入文件
numbers.txt
中,然后执行以下操作:

for i in $(cat numbers.txt); do
    ...
done

如果您按照@Barmar的建议创建文件,您还可以使用
while
循环并读取文件:

while read -r i; do
    ...
done < numbers.txt
读取时-ri;做
...
完成
如果您按照@Barmar的建议创建文件,您也可以使用
while
循环并读取文件:

while read -r i; do
    ...
done < numbers.txt
读取时-ri;做
...
完成
或者,为什么要循环?如果你有一个包含所有数字的文件(比如
numbers.txt
),你可以用一个简单的

grep -nH -w -f numbers.txt 201701*

其中,
-f
选项只是告诉
grep
使用文件
numbers.txt
中包含的值来搜索与
201701*
匹配的每个文件。
-nH
选项分别列出与每个匹配相关联的行号和文件名。正如Ed在下面指出的那样,
-w
选项以确保
grep
只选择包含整个单词的行。

或者,为什么要循环?如果您有一个包含所有数字的文件(比如
numbers.txt
),您可以通过简单的

grep -nH -w -f numbers.txt 201701*

其中,
-f
选项只是告诉
grep
使用文件
numbers.txt
中包含的值来搜索与
201701*
匹配的每个文件。
-nH
选项分别列出与每个匹配相关联的行号和文件名。正如Ed在下面指出的那样,
-w
选项以确保
grep
只选择包含整个搜索词的行。

很高兴您在这里接受教育。是的,单词匹配将非常有用。将进行修改。这不会按单词对结果进行分组,您需要再次传递结果来组织它们。很高兴您在这里接受教育。是的,单词匹配将非常有用。Will am结束。这并不是按单词对结果进行分组,你需要再次传递结果来组织它们。谢谢@Barman,这非常有效!事实上非常简单,如果我只是按照逻辑来实现如何从文件中提取值。但是我还有一个问题,我如何打破这些行。文件包含这些值显示在它找到的值的下面,但我希望它在它旁边。我应该回显“$line”还是打印“%s\n”“$line”事实上,我不知道我是否需要打印,也许我需要将输出结果放在一个新文件中,我可以用它来处理….do echo$i>>output.txt;grep-l$i 201701*>>output.txt;done…..但是我需要换行符放在output.txt中,并且只用于日期文件中的值。听起来在我脑海中很复杂。你可以做
echo$i$(grep-l$i 201701*)
谢谢@Barmar,但是输出给了我重复的结果,如下所示。我是否做了一些事情来更改bash.for i in$(cat home/example.txt);do echo$i;echo$i$(grep-l$i 201701*);done Result 6456564 6456564 20170125 9383766 9383766 8386353 8386353 20170111谢谢@Barman,这非常好!事实上非常简单,如果我只是按照逻辑来实现如何从文件中提取值。但是我还有一个问题,我如何打断行。包含值的文件显示在找到的值,但我希望它位于它旁边。我应该执行echo“$line”还是printf“%s\n”“$line”事实上,我不知道我是否需要打印,也许我需要将输出结果放在一个新文件中,我可以用它来处理….do echo$i>>output.txt;grep-l$i 201701*>>output.txt;done…..但是我需要换行符放在output.txt中,并且只用于日期文件中的值。听起来在我脑海中很复杂。你可以做
echo$i$(grep-l$i 201701*)
谢谢@Barmar,但是输出给了我重复的结果,如下所示。我是否做了一些事情来更改bash.for i in$(cat home/example.txt);do echo$i;echo$i$(grep-l$i 201701*);done Result 6456564 6456564 20170125 9383766 938383766 8386353 8386353 20170111