簡體   English   中英

在bash中轉置多列

[英]transposing multiple columns in bash

像這樣的半成品文件

Input1 file1:45764
Input1 file1:878755
Input1 file1: 899787
Input2 file1: 45676
Input2 file1:769678
Input2 file1: 6454764

我希望將它們轉換為

Input1 file1:45764, file1:878755, file1: 899787 
Input2 file1:45676, file1:769678, file1: 6454764 

有猜到嗎? 提前致謝

awk '{b[$1]=b[$1] $2$3"  "}END{for (i in b) print i,b[i]}' inputFile

將產生輸出為

Input1 file1:45764  file1:878755  file1:899787  
Input2 file1:45676  file1:769678  file1:6454764  

它能做什么?

{b[$1]=b[$1] $2$3" "}創建一個數組b追加第二和第三列(因為示例中filevalue之間存在一些空格)。 $2$3放入陣列。 該數組是一個由Inputx索引的關聯數組,其中x1,2...

那是

b['Input1'] = 'file1:45764  file1:878755  file1:899787'

END塊在輸入文件input末尾執行,

for (i in b) print i,b[i]}打印b數組的內容

如果要在輸出中使用逗號,請嘗試

awk '{if(b[$1])b[$1] = b[$1]", "; b[$1] = b[$1] $2 $3}; END{for(i in b)print i, b[i]}'

或稍微更簡短

awk '{b[$1]=b[$1](b[$1]?", ":"")$2$3}END{for(i in b)print i,b[i]}'

產量

Input1 file1:45764, file1:878755, file1:899787
Input2 file1:45676, file1:769678, file1:6454764

暫無
暫無

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

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