簡體   English   中英

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($2,a,"|")   #a[1] a[2] seperated by |
   split(a[2],b,"@") #b[1] b[2] seperated by @    

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

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

如何將輸出格式化為一行,用逗號分隔插入的列?

是否可以在輸出期間修剪每列開頭和結尾的空白?

謝謝約書亞

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

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

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

我們使用字段分隔符", "分割每條記錄", "然后替換| @在變量v2$2存儲值中具有相同的字段分隔符。 然后我們在OFS之后將這個v2變化值附加到$2 ,最后打印完整記錄。

awk另一種可能性是

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

使用split()我們分手了$2name|ID1234 @ tag1到保存在片a陣列。 然后我們在$2$3字段之間打印其中三個a[1] a[2] a[4]

split()的分隔符可以是正則表達式,而不僅僅是單個字符: /[ |]/

使用您顯示的示例,請嘗試以下awk代碼。 用 GNU awk編寫和測試。

awk '
match($0,/^[^,]*,[^,]*,/){
  val1=$3
  sub(/\|/,", ",val1)
  val2=val3=substr($0,RSTART,RLENGTH)
  sub(/.*@ /,"",val3)
  print val2,  val1 ", " val3 substr($0,RSTART+RLENGTH)
}
'  Input_file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM