使用可用於慶典的工具,我怎麼轉換分隔的數據轉換分隔的文件,以固定寬度的Linux
foo|bbbaaarrr|bazz
到固定寬度的數據
foo bbbaaarrrbazz EOL
我嘗試使用列作爲文檔暗示我可以定義列寬,不起作用。 我敢肯定,這是使用sed或awk的微不足道,但我不熟悉它們。
使用可用於慶典的工具,我怎麼轉換分隔的數據轉換分隔的文件,以固定寬度的Linux
foo|bbbaaarrr|bazz
到固定寬度的數據
foo bbbaaarrrbazz EOL
我嘗試使用列作爲文檔暗示我可以定義列寬,不起作用。 我敢肯定,這是使用sed或awk的微不足道,但我不熟悉它們。
以下應爲你工作:
column -t -s '|' input_file_here
它將輸入文件轉換爲表格格式。輸入記錄分隔符由-s
指定。如果要在字段中填充空格以外的內容,請使用-o
來設置輸出分隔符。輸出分隔符默認爲兩個空格,所以輸出中每列之間會有兩個空格。
實施例:
$ cat input
hello|world|testing
a|b|c
another|test|line
$ column -t -s '|' input
hello world testing
a b c
another test line
http://man7.org/linux/man-pages/man1/column.1.html
編輯:
如果需要每個字段是固定長度,則可以使用awk
爲該。你需要設置輸入分隔符爲您的文件,但這樣的事情應該工作:
$ awk -F '|' '{ for (i=1; i<=NF; i++) { printf("%-10s", $i); } print ""; }' input
hello world testing
a b c
another test line
只要改變在printf
語句中指定的字段寬度。
這就是我認爲的,使用-c來定義列寬度。沒有工作,其他手冊頁意味着-c定義了列數。我認爲專欄只是一種類型的預報。在你的例子中,列的寬度由最長參數的寬度來定義。 –
@RickDeBay - 查看編輯。如果您需要將字段截斷爲擬合,您還需要使用'substr($ i,1,your_len_here)'而不是'$ i'。 –
一個小小的改進(假設需要截斷):將寬度作爲參數傳遞:'awk -F'|' -v w = 9'{for(i = 1; i <= NF; i ++)printf「% - * s」,w,substr($ i,1,w);打印「」}'文件' –
向我們展示一些示例輸入和所需的輸出。 –
1)列的寬度是否相同? 2)如果一個值超出列寬,你期望什麼? – rici
輸入列將是不同的寬度,我強制輸出是相同的寬度。我的期望是,它應該會非常壯觀,因爲輸入數據是嚴格定義的(這就是爲什麼我不知道爲什麼他們堅持用這種格式來交換這些數據) –