我在阅读多个文件和从这些文件中收集信息时遇到问题。这些文件的输入如下:
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!答案 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一次完成整个事情:)