【问题标题】:Iterate over files and update rows in directory, preferably using Bash script迭代文件并更新目录中的行,最好使用 Bash 脚本
【发布时间】:2017-01-24 12:42:01
【问题描述】:

我在一个目录中有 300 个文本文件,格式如下

 regional_vol_WM1.txt

    651328 651328
    553949 553949
    307287 307287
    2558 2558       



regional_vol_WM2.txt

    651328 651328
    553949 553949
    307287 307287
    2138 2138

我想遍历所有这些 txt 文件并使用公式对第 4 行两列进行计算

(Value of fourth row /0.824198)*0.8490061

应该创建一个新名称的新文件regional_vol_WM2_prop.txt,前三行具有相同的值,第四行具有新计算的输出的更新值

任何建议表示赞赏。

【问题讨论】:

  • 你试过了吗?
  • 这不是 SuperUser 之类的问题吗?
  • 第 4 行有两列,您对哪个值感兴趣?
  • @PS。两个值都应该更新
  • @redneb,我可以遍历目录中的文件,我已经为其编写了代码,我只是想要一种方法来创建一个新文件,其中包含第四行中新更新的数据

标签: bash file for-loop iteration


【解决方案1】:
#!/bin/bash

awk '
FNR == 1 {
  newfilename = FILENAME ; sub(".txt", "_prop.txt", newfilename)
  printf "" > newfilename
}
FNR == 4 {
  $1=($1/0.824198)*0.8490061
  $2=($2/0.824198)*0.8490061
}
{
  print >> newfilename
}
' regional_vol_WM*[0-9].txt

【讨论】:

  • 在我的目录中运行 awk 文件时出现错误:以下是错误 awk: 15: unexpected character '.'
  • 你确定你有终止单引号? awk 认为文件名 arg 是 awk 脚本的一部分,但它不应该这样做。这是 bash 中的文件名 glob。
  • @DannyDaglas 不,我没有终止单引号,正常的文件名遵循以下命名约定:regional_vol_GM_122.txt
  • 简而言之,脚本文件的格式应该是:#!/bin/bash \n awk 脚本文件名。 “awk”之后和文件名模式之前的所有内容都应该用单引号引起来(脚本)。文件名模式应与您需要处理的内容相匹配。另外,请确保 awk 脚本部分中没有单引号。
  • 我仍然收到错误regional_vol_WM_atlas[0-151].txt: No such file or directory
猜你喜欢
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 2012-06-26
  • 2023-03-20
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多