有没有办法在 while 循环中使用 less 命令?

Is there a way to use the less command in a while loop?

我有一个 while 循环,它接受一个输入并为每个条目创建一个 printf。这个文件真的很大,打印出来要花很长时间。有没有一种方法可以将结果保存到文件中并使用 less 使其成为分页输出?

while read line
do
            id=$(cut -d' ' -f1 <<< $line)
            ip=$(cut -d' ' -f2 <<< $line)
            mon=$(cut -d' ' -f3 <<< $line)
            day=$(cut -d' ' -f4 <<< $line)

            printf "%s 45%s (%s %s)\n" "$id" "$ip" "$mon" "$day"
done <<< "$inputFile"

我试过了

result+=$("%s 45%s (%s %s)\n" "$id" "$ip" "$mon" "$day")

然后只是做

less "$result"

在循环之外,但这没有用,我不知道从这里到哪里去。

*nix 就是流媒体工具。一个工具流向另一个工具。如果你想看你的脚本 运行 少用你可以 'pipe' 它...

将您的脚本写入文件 - 我们将其称为“my.script.sh”,使其可执行“chmod +x my.script.sh”然后使用 | (管道)运算符...

./my.script.sh | less

正如 Gordon 所说,这是很多毫无意义的工作,尤其是当文件很大时。另外 <<< "$inputFile" 意味着您所说的文件的 整个文本 已经读入 inputFile 变量,这似乎毫无意义并且适得其反,除非有一些特定的原因?

试试这样的 -

awk '{printf "%s 45%s (%s %s)\n", , , , }' file.in | less

或者如果您希望将输出保存在文件中并分页到屏幕,

awk '{ printf "%s 45%s (%s %s)\n", , , ,  }' file.in | tee out.txt | less
  

我也同意克林特的观点。分页可能应该是分开的 - 但由于我还没有看到整个结构,尝试一些看看有什么用。