【问题标题】:use tail in bash shell在 bash shell 中使用 tail
【发布时间】:2020-04-03 00:10:45
【问题描述】:

我的文件 f1 在新行中包含 x1、x2、x3、x4 各一个,如下图所示。 我想读取给定的参数 n。 如果 n = i,我想从位置 i 开始将 f1 的行写入文件 f2 中。

如果 n=2 f2 将包含 x2、x3、x4 的示例。

如果 n=3,则 f2 将包含 x3、x4。

我下面的代码不能完美运行。有谁知道如何解决只使用 tail 命令

代码:

t = $n-1
tail -n -$t  $F1 >> F2.txt  

【问题讨论】:

  • 为什么只能使用tail命令?是作业吗?对于sed,这是一项微不足道的工作。
  • 请不要发布代码或示例的图片。写下来。
  • t = $n-1 尝试运行带有参数=$n-1 的命令t。正确的bash 代码应该是t=$((n-1)) 以使t 的值比n 小一。
  • @Quasímodo 我知道,但我要求用尾巴做。谢谢
  • @chepner 要么与你一起改变 t=$((n-1)) 我仍然有输出问题。我的文件 F2 只包含 F1 的最后一行。

标签: linux bash shell tail


【解决方案1】:

您使用了正确的选项n | --lines

来自尾部man page

-n, --lines=[+]NUM 输出最后 NUM 行,而不是最后 10 行;或使用 -n +NUM 从第 NUM 行开始输出

因此,基于此,您应该为选项提供以+ 开头的有效值,例如:

n=3
t=$((n-1)) # arithmetic calc -> 2
tail --lines=+$t $F1 >> F2.txt  

tail --lines=+$t $F1 的输出将是例如:

x2
x3
x4

【讨论】:

  • 感谢您的回复,但我收到此错误 tail: 非法选项 -- - 用法:tail [-F | -f | -r] [-q] [-b # | -c # | -n #] [文件...]
  • @charles 感谢您的反馈。通常我不会在测试之前发布一些东西,除非我 100% 确定。也许它取决于发行版/版本,为什么它对你不起作用。你能试试tail -n +$t而不是tail --lines=+$t吗?
猜你喜欢
  • 2019-09-28
  • 2011-06-09
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-06
  • 2012-12-05
  • 2011-01-03
相关资源
最近更新 更多