簡體   English   中英

使用awk / sed將數字字符串分成3列

[英]Separate string of digits into 3 columns using awk/sed

我的行中有一串數字,如下所示:

6390212345678912011012112121003574820069121409100000065471234567810
6390219876543212011012112221203526930428968109100000065478765432196

我需要分成6列,如下所示:

639021234567891,201101211212100,3574820069121409,1000000,654712345678,10
639021987654321,201101211222120,3526930428968109,1000000,654787654321,96

條件:

  • 欄位1 = 15個字元
  • 欄位2 = 15個字元
  • 欄位3 = 15或16個字元
  • 欄位4 = 7個字元
  • 欄位5 = 12個字元
  • 欄位6 = 2個字元

最終輸出:

639021234567891,3574820069121409,654712345678
639021987654321,3526930428968109,654787654321

目前尚不清楚如何檢測字段3應該包含15個字符還是16個字符。 但作為前3個字段的草稿,您可以使用類似以下內容的代碼:

     echo 63902910069758520110121121210035748200670169758510 |
 awk '{ printf("%s,%s,%s",substr($1,1,15),substr($1,16,15),substr($1,30,15)); }'

或使用sed:

echo $NUM | sed -r 's/^([0-9]{16})([0-9]{15})([0-9]{15,16}) ...$/\1,\2,\3, .../'

基於整個字符串的長度,這將對字段3的長度使用15或16。

如果您使用的是gawk

gawk -v f3w=16 'BEGIN {OFS=","; FIELDWIDTHS="15 15 " f3w " 7 12 2"} {print $1, $3, $5}'

您提前知道字段3的寬度是多少嗎? 您是否需要以編程方式確定它? 怎么樣? 基於線的總長度? 它會逐行更改嗎?

編輯:

如果您沒有gawk ,那么這是一種類似的方法:

awk -v f3w=16 'BEGIN {OFS=","; FIELDWIDTHS="15 15 " f3w " 7 12 2"; n=split(FIELDWIDTHS,fw," ")} { p=1; r=$0; for (i=1;i<=n;i++) { $i=substr(r,p,fw[i]); p += fw[i]}; print $1,$3,$5}'

暫無
暫無

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

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