【问题标题】:Trying to parse values from a TSV file into 2 matching Bash arrays尝试将 TSV 文件中的值解析为 2 个匹配的 Bash 数组
【发布时间】:2014-05-13 01:37:10
【问题描述】:
单元标题类标题文件名

单元标题1 标题1 文件名1

单元标题2 标题2 文件名2
                标题 3 文件名 3
                标题 4 文件名 4
                标题 5 文件名 5

单元标题3 标题6 文件名6
                标题7 文件名7
                标题 8 文件名 8
                标题 9 文件名 9

单元 Title4 Title10 Filename10
                标题11 文件名11
                Title12 文件名12

我有大量具有这种结构的 TSV(制表符分隔值)文件。我正在尝试编写一个 bash 脚本,可以将这些文件解析为匹配的数组。这是让我陷入循环的空行。我需要能够列出一个班级标题,同时也列出它属于哪个“单元标题”。

我可以将每个组放入自己的数组中,但我无法复制“单元标题”中的条目以与类标题对齐。有人可以帮我指出正确的方向吗?谢谢!

【问题讨论】:

  • 评论:请发布一些您已经拥有的代码。
  • 以及需要将哪些内容提供给数组的详细信息。

标签: arrays bash awk text-parsing tsv


【解决方案1】:

我不清楚您希望数组是什么样子,但也许预处理输入文件以填充所有列会有所帮助:

awk -F'\t' -v OFS='\t' '
  $0 != "" {  # process only non-empty lines
      # If field 1 is empty, set it to the most recent unit title.
    if ($1 != "") ut=$1; else $1=ut;
      # Print the (rebuilt) line.
    print
  }' tsvfile

这将导致类似(\t 表示文字选项卡),这应该使解析更容易:

Unit Title1\tTitle1\tFilename1
Unit Title2\tTitle2\tFilename2
Unit Title2\tTitle3\tFilename3
Unit Title2\tTitle4\tFilename4
Unit Title2\tTitle5\tFilename5
Unit Title3\tTitle6\tFilename6
Unit Title3\tTitle7\tFilename7
...

【讨论】:

  • 完美!这正是我所需要的。谢谢!
  • @user3456429:我的荣幸;很高兴听见;我冒昧地将您的问题中的“CSV”更改为“TSV”(制表符分隔值)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 2020-03-09
相关资源
最近更新 更多