[英]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()
我們分手了$2
場name|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.