Text-Processing

使用 AWK 將子字元串按最後 n 個字元拆分為新列

  • May 7, 2017

我有一個大.csv文件,我需要按字元串長度拆分特定列。我正在嘗試獲取第 2 列的最後 6 個字元並將它們移動到新列中。

目前

3102017,90131112,0,740
3022017,8903944,90,0
3092017,127037191,475,0

期望

3102017,90,131112,0,740
3022017,8,903944,90,0
3092017,127,037191,475,0

使用符合 POSIX 的awk

awk -F, -v OFS=, '{sub(/.{6}$/, OFS "&", $2); print}'

使用符合 POSIX 的sed

sed 's/^\([^,]*,[^,]*\)\([^,]\{6\}\)/\1,\2/'

僅當第二個欄位至少有 6 個字元長時才修改行(請注意,它會很高興地更改111,123456,333111,,123456,333將第二個欄位留空)。

KISS 方法,使用awk

$ awk -F, '{l=length($2); if (l>6) {$2=substr($2,1,l-6) OFS substr($2,l-5)}} 1' OFS=, file
3102017,90,131112,0,740
3022017,8,903944,90,0
3092017,127,037191,475,0

引用自:https://unix.stackexchange.com/questions/362839