Text-Processing
塊的文本處理行到列
我有一個包含 Solaris 列表的文件:
List A hi hello hw r u List B Hi Yes List C Hello
我需要轉置列表,如下所示:
List A List B List C hi Hi Hello hello Yes hw r u
我怎樣才能在 Solaris 上做到這一點?
您可以使用
awk
將每個塊拆分為單獨的文件,然後將paste
它們放在一起(下面假設每個列表之間總是有空行)。awk '/^$/ {N++;next}{print >"file"N}' infile.txt paste file*
您也可以將
paste
命令移動到awk
.awk '/^$/ {N++;next}{print >"file"N} END{system("paste file*")}' inile.txt
輸出是:
List A List B List C hi Hi Hello hello Yes hw r u
在改變如下線長度時產生美麗的壓痕:
輸入文件:
list A hi hello hw r u List B Hi this is list B Yes List C Hello, this is list C
你可以做
paste file* |column -s $'\t' -tn
並且會有結果:list A List B List C hi Hi this is list B Hello, this is list C hello Yes hw r u
除了我之前的回答之外,還有
csplit
命令以同樣的方式拆分文件,然後使用paste
命令來獲得所需的輸出。csplit -zs -f outputfile inputfile '/^List/' '{*}' paste outfile*
'/^List/'
是一種模式,用於匹配並將那裡的文件分解為下一個新文件'{*}'
盡可能多地重複模式-z
用於刪除空的輸出文件;並且-s
用於不列印輸出文件大小的計數-f
用於定義自定義前綴*outputfile##*其中##
預設為 2 位,您可以定義它-n N
(N 是定義前綴後的後綴中的位數)