Bash 多次读取文件且输出不正确

Bash reads files multiple times & output isn't right

我在读取多个文件并从这些文件中收集信息时遇到问题。这些文件的输入如下:

文件 1:

number1
text
number2
text
number3
text

文件 2:

number4
text
number5 
...

我只想从每个文件中取出数字,这些数字需要放在彼此下面,但只有 1 次。

像这样:

number1
number2
number3
number4
number5

我有:

var0=$(echo "test")
var2=$(echo "test2")

for file in*.txt
do
     var1=$(awk -F .. do something "$file")
done
echo "$var0" "$var1" "$var2" >> myfile

那么我想要它做什么:

test1
here print var1 (so the numbers)
test2

输入文件中有一些我想用 awk 命令输出的内容,这非常有效,当我回显 var 时,我得到 number1,number2,number3,number4,number5,number1,... 所以它保持重复命令。

当我打印所有 var 时,他只给出 var1 中最后一个文件的值:

test
number4
number5
test2

我什么都想要,还有 number1, number2,...

提前联系!

您正在循环中覆盖变量 $var1,因此您只获得最后一个文件的内容也就不足为奇了。

如果我没理解错的话,你想要这样的东西:

awk 'BEGIN{print "test"}/^[0-9]+$/;END{print "test2"}' *.txt

这会在一个 awk 命令中读取所有 .txt 文件并打印任何仅包含数字的行(我假设这就是您编写 number1[=35= 时的意思], number2 等)

但是,如果您想继续使用您的方法,我想您唯一需要做的就是连接每个 awk 的输出,而不是覆盖 $var1:

var1+=$(awk -F .. do something "$file")
----^

如果您实际上并不关心变量 $var1,则无需使用串联,如评论中的 tripleee 所示:

{ echo "test"; for f in *.txt; do awk ... "$f"; done; echo "test2"; } >myfile

你也可以跳过循环(这样会更短更快):

{ echo "test"; awk ... "$f" *.txt; echo "test2"; } >myfile

...如果你能做到这一点,我们就已经回到了我的第一个建议,即使用 awk 一次性完成所有事情:)