【问题标题】:Text Editor is edited in a particular field is written as shown below文本编辑器是在特定字段中编辑的,如下图所示
【发布时间】:2015-06-24 11:07:49
【问题描述】:

我有一个包含一些行的文本文件,例如:

hbcdefgg001asdfn    
hasezahg002ehea     
jasehaah003dcdn    
abcdefgh006ahdh

这些行遵循固定的格式,例如:

  1. 前 8 个字符必须是字母
  2. 那么接下来的 3 个字符是数量,
  3. 后跟 4 个字母的代码。

最后一行包含最后一行的总数。我现在需要以编程方式将前 3 行复制 10 次,然后用新的总量重新输入最后一行。

我想知道您认为处理每条线的最佳方法是什么?每个字母/金额/代码的位置是固定的。

【问题讨论】:

  • 最后一行的格式是什么?总数没有超过 3 个字符的限制吗?
  • 行与行之间是否有空行?在您的输入中,位置是固定的。
  • 嗨@KDM,是的,如果您的总数超过999,它会。实际上文件更复杂,但我只是列出了一个简单的例子。假设我必须复制 10 次,然后数量不会超过 999 :)
  • 您的示例破坏了您想要的文件格式。前两行开头仅包含 7 个字母。
  • 嗨@Tichodroma,行之间没有空行:)

标签: java file terminal


【解决方案1】:

使用 shell 工具:seqheadcutawktailsed

输入文件:

$ cat so.txt 
hbcdefgX001asdfn
hasezahX002ehea 
jasehaah003dcdn
abcdefgh006ahdh

打印前三行 1000 次:

$ for i in $(seq 1000)
do
    head -3 so.txt >> so-long.txt
done

计算总和:

$ sum=$(cut -b9-11 < so-long.txt | awk '{sum += $1}; END {print sum}')

替换最后一行中的总和并将其附加到输出中:

$ tail -1 so.txt | sed "s/^\(........\)\(...\)/\1${sum}/" >> so-long.txt

现在so-long.txt 包含 6,000 行,最后五行是:

$ tail -5 so-long.txt
jasehaah003dcdn
hbcdefgX001asdfn
hasezahX002ehea 
jasehaah003dcdn
abcdefgh6000ahdh

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2022-09-29
    相关资源
    最近更新 更多