Arrays 尝试将TSV文件中的值解析为2个匹配的Bash数组 单元标题类标题文件名 单元标题1标题1文件名1 单元标题2标题2文件名2 标题3文件名3 标题4文件名4 标题5文件名5 单元标题3标题6文件名6 标题7文件名7 标题8文件名8 标题9文件名9 单元标题4标题10文件名10 标题11文件名11 标题12文件名12

Arrays 尝试将TSV文件中的值解析为2个匹配的Bash数组 单元标题类标题文件名 单元标题1标题1文件名1 单元标题2标题2文件名2 标题3文件名3 标题4文件名4 标题5文件名5 单元标题3标题6文件名6 标题7文件名7 标题8文件名8 标题9文件名9 单元标题4标题10文件名10 标题11文件名11 标题12文件名12,arrays,bash,awk,text-parsing,tsv,Arrays,Bash,Awk,Text Parsing,Tsv,我有大量的TSV(制表符分隔值)文件,其结构如下。我正在尝试编写一个bash脚本,可以将这些文件解析为匹配的数组。是那些空话让我感到困惑。我需要能够列出一个类标题,同时也列出它属于哪个“单元标题” 我可以将每个组放入它们自己的数组中,但我不能复制“单元标题”中的条目以与类标题对齐。有人能帮我指出正确的方向吗?谢谢 我不清楚您到底希望数组是什么样子,但是,预处理输入文件以填充所有列可能有助于: Unit Title Class Title File Name Unit

我有大量的TSV(制表符分隔值)文件,其结构如下。我正在尝试编写一个bash脚本,可以将这些文件解析为匹配的数组。是那些空话让我感到困惑。我需要能够列出一个类标题,同时也列出它属于哪个“单元标题”


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

我不清楚您到底希望数组是什么样子,但是,预处理输入文件以填充所有列可能有助于:

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 这将产生类似(
\t
表示文字选项卡)的结果,这将使解析更容易:

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

评论:请发布一些你已经拥有的代码。以及哪些内容需要被提供给数组的细节。完美!这正是我需要的。谢谢@用户3456429:我的荣幸;很高兴听到这个消息;在您的问题中,我冒昧地将“CSV”更改为“TSV”(制表符分隔值)。
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
...