Bash多次读取文件&输出不对

时间:2015-04-24 08:52:24

标签: bash file variables for-loop echo

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

File1中:

number1
text
number2
text
number3
text

文件2:

number4
text
number5 
...

我只想从每个文件中获取数字,这些数字需要放在彼此之下,但只需要一次。

像这样:

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,......

提前Ty!

1 个答案:

答案 0 :(得分:1)

你在循环中覆盖你的变量$var1,所以你只得到最后一个文件的内容就不足为奇了。

如果我理解正确,你需要这样的东西:

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

这会读取一个awk命令中的所有.txt个文件并打印任何只包含数字的行(我假设你写的是 number1 时的意思, 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一次完成整个事情:)