【问题标题】:how to insert a value in multiple text files in command line如何在命令行的多个文本文件中插入一个值
【发布时间】:2018-08-30 14:36:52
【问题描述】:

我有 100 个 .txt 文件,我需要将值从 0 更改为 20。除了手动执行之外,是否有任何命令行可以执行此操作。

该文件夹包含许多文件,我只需要编辑其中的 100 个文件,如下所示

文件包含的内容:文件包含以下值

输入 1:

0 0.281250 0.894444 0.132812 0.108333

输入 2:

0 0.261450 0.544444 0.139812 0.122333

0 0.234550 0.844444 0.134812 0.109333

我希望如何更改:

输出 1:

20 0.281250 0.894444 0.132812 0.108333

输出 2:

20 0.261450 0.544444 0.139812 0.122333

20 0.234550 0.844444 0.134812 0.109333

请帮忙,因为手动编辑所有 100 个文件很困难

【问题讨论】:

  • 您可以使用sed 执行此操作,例如使用 GNU sed sed -E 's/\w+/20/'。没有更多细节,很难给出全面的答案
  • 文件名是这样的:tt_bat_(25).txt,其中的内容是:0 0.357422 0.512500 0.158594 0.322222 0 0.357422 0.512500 0.158594 0.322222
  • 不要在 cmets 中添加新信息,将其添加到问题中
  • 我已经添加了,我在评论中写了同样的东西。由于对齐,它在评论中没有正确显示

标签: command-line text-files vi


【解决方案1】:

我会把你的问题分成几部分

1) 如何替换文件中的字段?

对于这个任务,您可以使用 awk。 awk 的输出将存储在单独的输出文件中。由于您没有提供有关格式的很多详细信息,我认为需要在更改第一个值之前验证它是否为零。如果不需要,可以省略“if ($1 == 0)”部分。

awk '{ if ($1 == 0) { $1 = 20 } ; print $0 }' tt_bat_001.txt > tt_bat_001.out

2) 如何对多个文件重复一个命令?

您写道您需要处理许多文件中的 100 个,但您没有解释如何区分需要处理的文件。是按文件名吗?是内容吗?其他方式?

所以,首先你需要生成一个文件列表。如果是名字,你可以使用find。如果是按内容,则可以使用 grep。获得列表后,您可以使用 xargs 对列表中的每个文件重复该命令。这是一个使用 find 对“*.txt”文件应用命令的示例

find . -name '*.txt' | xargs -I % sh -c "awk '{ if (\$1 == 0) { \$1 = 20 } ; print \$0 }' % > %.out"

3) 如何对源文件应用命令?

因为您无法读取和覆盖同一个文件。您可以 mv .out 文件并覆盖您的源。您可以通过在命令中添加 mv 来实现此目的

find . -name '*.txt' | xargs -I % sh -c "awk '{ if (\$1 == 0) { \$1 = 20 } ; print \$0 }' % > %.out ; mv %.out %"

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-29
    • 2015-07-12
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多