【问题标题】:Parsing through Bash通过 Bash 解析
【发布时间】:2020-12-08 23:11:45
【问题描述】:

我想知道当数据如下所示时是否可以使用 bash 创建一个分隔文本文件:

变量1:数据A,
变量2:数据A1,
变量3:数据A2

变量1:数据B,
变量2:数据B1,
变量3:数据B2

变量1:数据C,
变量2:数据C1,
变量3:数据C2

我的目标是使数据如下所示:

变量1、变量2、变量3
数据A,数据A1,数据A2
dataB, dataB1, dataB2,
dataC, dataC1, dataC2

有什么可以帮助我的吗?

【问题讨论】:

  • 为了便于阅读,请使用code blocks
  • 正如@ghilesZ 所指出的,请edit 发帖,以便更好地阅读。另外,你能展示一下你尝试了什么吗?

标签: bash csv


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

header=1
first=1
values=""
while read -r key value ; do
    if [[ ! $key ]] ; then
        if [[ $header ]] ; then
            printf '\n%s' "$values"
        fi
        header=""
        first=1
        printf '\n'
        continue
    fi
    if [[ $header ]] ; then
        if [[ ! $first ]] ; then
            printf ,
        fi
        key=${key%:}
        printf '%s' "$key"
        values+=$value
    else
        printf '%s' "$value"
    fi
    first=""
done

【讨论】:

    【解决方案2】:

    它是Miller 输入格式之一。从

    开始
    variable1: dataA
    variable2: dataA1
    variable3: dataA2
    
    variable1: dataB
    variable2: dataB1
    variable3: dataB2
    
    variable1: dataC
    variable2: dataC1
    variable3: dataC2
    

    简单地运行

    mlr --x2c --ips ": " cat ./input.txt >./output.tx
    

    你会有

    variable1,variable2,variable3
    dataA,dataA1,dataA2
    dataB,dataB1,dataB2
    dataC,dataC1,dataC2
    

    一些注意事项:

    • --x2cXTAB 转换为 CSV
    • --ips ": " 设置对分隔符

    【讨论】:

      猜你喜欢
      • 2014-04-03
      • 2015-06-02
      • 1970-01-01
      • 2020-06-16
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 2015-06-09
      相关资源
      最近更新 更多