在文本文件中打印行中的每个备用列

时间:2018-10-30 15:26:28

标签: awk command-line

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

示例输入文件:

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

示例输出:

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

4 个答案:

答案 0 :(得分:1)

awk解决方案

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

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

答案 1 :(得分:0)

 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

答案 2 :(得分:0)

根据您的示例并输出:

$ 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

答案 3 :(得分:0)

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

使用awk的split函数。

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