【问题标题】:Print every alternate column in row in a text file打印文本文件中行中的每一列
【发布时间】:2018-10-30 15:26:28
【问题描述】:

我有一个逗号分隔的文件。我想将每个备用列打印到一个新行中。

示例输入文件:

Name : John, Age : 30, DOB : 30-Oct-2018

示例输出:

Name,Age,DOB  
John,30,30-Oct-2018

【问题讨论】:

  • 你应该展示你的尝试
  • awk -F'[:,]' '{for(i=2;iNF)?ORS:OFS)}' OFS=,该命令有效,但缺少标题
  • 请通过添加您的尝试来编辑您的问题

标签: awk command-line


【解决方案1】:

awk解决方案

$ sed 's/[,:]/\n/g;s/ //g' file | pr -3ts,

Name,Age,DOB
John,30,30-Oct-2018

【讨论】:

  • 假设 3 个字段;您可以通过先计数来使其动态化,但此时在awk 中可能更容易做到这一点。
【解决方案2】:
 awk 'BEGIN{FS="[[:blank:]]*[:,][[:blank:]]*"}
      { for(i=1;i<=NF;i+=2) printf (i==1?"":",") $i; print "" }
      { for(i=2;i<=NF;i+=2) printf (i==1?"":",") $i; print "" }' inputfile

【讨论】:

    【解决方案3】:

    根据您的示例和输出:

    $ awk -F', ' '/ : / { for (i=1;i<=NF;i++) { if ( match($i,/ : /) ) { linekeys=linekeys substr($i,1,RSTART-1) ","; linevalues=linevalues substr($i,RSTART+RLENGTH) ","; } } print(substr(linekeys,1,length(linekeys)-1)); print(substr(linevalues,1,length(linevalues)-1)); linekeys=""; linevalues=""; }' file.txt
    Name,Age,DOB
    John,30,30-Oct-2018
    

    【讨论】:

      【解决方案4】:

      这是您可以用来实施解决方案的一般想法。

      使用 awk 的 split 函数。

      1. 使用行分隔符 (", ") 将整行拆分为数组 rows,并保存行数。
      2. 用列分隔符(" : ")将每一行拆分成一个数组cols,并保存列数。并遍历列值并将它们存储到一个表中,按行和列索引,例如data[row","col]
      3. 最后,遍历第一个列数和行数,打印data[row","col]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-06
        • 1970-01-01
        • 1970-01-01
        • 2016-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多