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