awk 插入列并在单行上打印

awk insert columns and printing on single line

我正在尝试使用 AWK 处理逗号分隔的文本文件并插入新列。 我想把第二列的内容分成三部分插入三列 在新文本文件中的 B 列之后。

insert.txt - 我的数据

column A, name|ID1234 @ tag1, column C, column D

我正在尝试生成的输出

column A, name|ID1234 @ tag1, name, ID1234, tag1, column C, column D

我试过的代码

#!/bin/awk

BEGIN {
   FS=","
  OFS=","
}
{
#  Split Column B - twice
   split(,a,"|")   #a[1] a[2] seperated by |
   split(a[2],b,"@") #b[1] b[2] seperated by @    

   print ,,a[1],b[1],b[2]; 
   {for(i=3;i<=NF;++i) printf $i}
}

awk -f insert.awk insert.txt > output.txt

如何将输出格式化为在一行中,用逗号分隔插入的列?

是否可以输出到trim每列开头和结尾的白色space?

谢谢 约书亚

您可以在 awk 的任何版本中使用此解决方案:

awk 'BEGIN {FS=OFS=", "}
{v2 = ; gsub(/ *[|@] */, OFS, v2);  =  OFS v2} 1' file

column A, name|ID1234 @ tag1, name, ID1234, tag1, column C, column D

我们使用字段分隔符 ", " 拆分每条记录,然后在 </code> 的存储值中用相同的字段分隔符替换 <code>|@ 变量 [=16] =].然后我们在 </code> 中追加 <code>v2 的更改值 OFS 之后,最后打印完整记录。

awk 的另一种可能是

awk 'BEGIN {FS=OFS=", "}{split(,a,/[ |]/);print , , a[1], a[2], a[4], , }' file
column A, name|ID1234 @ tag1, name, ID1234, tag1, column C, column D

我们使用 split()</code> 字段 <code>name|ID1234 @ tag1 拆分为保存在 a 数组中的片段。然后我们在 </code> 和 <code> 字段之间打印其中三个 a[1] a[2] a[4]

split() 的分隔符可以是正则表达式,而不仅仅是单个字符:/[ |]/

使用您显示的示例,请尝试以下 awk 代码。使用 GNU awk.

编写和测试
awk '
match([=10=],/^[^,]*,[^,]*,/){
  val1=
  sub(/\|/,", ",val1)
  val2=val3=substr([=10=],RSTART,RLENGTH)
  sub(/.*@ /,"",val3)
  print val2,  val1 ", " val3 substr([=10=],RSTART+RLENGTH)
}
'  Input_file