簡體   English   中英

linux / unix將定界文件轉換為固定寬度

[英]linux/unix convert delimited file to fixed width

我需要將定界文件轉換為定寬文件,詳細信息如下。

輸入文件樣本:

AAA|BBB|C|1234|56
AA1|BB2|DD|12345|890

輸出文件樣本:

AAA  BBB   C   1234  56  
AA1  BB2   DD  12345 890

現場職位詳情

  • 欄位1從位置1開始,長度應為5
  • 欄位2從位置6開始,長度應為6
  • 欄位3從位置12開始,長度應為4
  • 欄位4從位置16開始,長度應為6
  • 欄位5從位置22開始,長度應為3

使用以下awk命令,您可以實現目標:

awk 'BEGIN { RS=" "; FS="|" } { printf "%5s%6s%4s%6s%3s\n",$1,$2,$3,$4,$5 }' your_input_file

記錄分隔符( RS )是一個空格,而字段分隔符( FS )是一個豎線( | )字符。 為了正確解析您的數據,我們在BEGIN語句中設置它們(在讀取任何數據之前)。 然后使用printf和所需的格式字符,我們以所需的格式輸出數據。

輸出:

  AAA   BBB   C  1234 56
  AA1   BB2  DD 12345890

更新:

我剛剛看到了您對輸入文件格式的編輯(以前看起來似乎有所不同)。 如果輸入數據記錄用新行分隔,則只需刪除RS=" "; 從上面的單行代碼中刪除,然后將-修飾符應用於格式字符以使字段左對齊:

awk 'BEGIN { FS="|" } { printf "%-5s%-6s%-4s%-6s%-3s\n",$1,$2,$3,$4,$5 }' your_input_file

另一個awk解決方案:

echo -e "AAA|BBB|C|1234|56\nAA1|BB2|DD|12345|890" | 
awk -F '|' '{printf "%-5s%-6s%-4s%-6s%-3s\n",$1,$2,$3,$4,$5}'

請注意-在printf語句中%-3s之前的- %-3s問題的要求將字段左對齊。 輸出:

AAA  BBB   C   1234  56 
AA1  BB2   DD  12345 890

暫無
暫無

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

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