尝试将TSV文件中的值解析为2个匹配的Bash数组

时间:2014-04-02 01:55:20

标签: arrays bash awk text-parsing tsv

Unit Title      Class Title         File Name

Unit Title1     Title1              Filename1

Unit Title2     Title2              Filename2
                Title3              Filename3
                Title4              Filename4
                Title5              Filename5

Unit Title3     Title6              Filename6
                Title7              Filename7
                Title8              Filename8
                Title9              Filename9

Unit Title4     Title10             Filename10
                Title11             Filename11
                Title12             Filename12

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

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

1 个答案:

答案 0 :(得分: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
...