【发布时间】:2020-06-23 13:49:42
【问题描述】:
所以基本上我有一个包含很多空行的文本文件。我们称它为 time.txt,该文件的一部分如下所示:
1 5 20
2 5 12
1 6 3
2 6 4
1 10 30
2 10 21
1 11 27
2 12 8
1 11 34
2 12 20
1 10 30
2 10 21
现在,我有另一个文件,名为 location.txt,其中包含的行数与 time.txt 中的空白行数相同。它看起来像这样:
110 -7 5.000 66
110 -7 5.000 99
110 -7 5.000 60
而我想要的其实很简单:我只想用 location.txt 中的每一行填充 time.txt 中的空白行,给出预期的结果:
110 -7 5.000 66
1 5 20
2 5 12
1 6 3
2 6 4
110 -7 5.000 99
1 10 30
2 10 21
1 11 27
2 12 8
1 11 34
2 12 20
110 -7 5.000 60
1 10 30
2 10 21
我解决这个问题的方法是逐行读取 location.txt,将每一行存储在循环内的一个变量中,然后使用 awk 检测 time.txt 中的空行 并将其替换为存储的循环变量。我的代码如下所示:
time="time.txt"
location="location.txt"
while read -r lines_locs; do
awk '!NF{$0=$lines_locs}1' $time
done < "$location"
但这只会在我的屏幕上打印出 time.txt,而不会进行任何替换。另外,与预期的行数相比,我打印的行数过多。我确定我遗漏了一些东西,如果有人能指出这一点,我会很高兴。
【问题讨论】:
-
您希望每个文件有多少行?另外,空白行真的是空白还是它们包含空格(例如,空格、制表符)?
-
time.txt 中的 39757 行和 location.txt 中的 643 行
标签: bash awk while-loop