我想使用“awk subtring”提取一個值,它還應該計算沒有任何分隔符的空格數。
比如下面是輸入,我要提取“29611”,包括空格,
201903011232101029 2961104E3021 223 0 12113 5 15 8288 298233 0 45 0 39 4
我使用了這種方法,但它使用空格作為分隔符:
more abbas.dat | awk '{print substr($1,1,16),substr($1,17,25)}'
預期輸出應該是:
201903011232101029 2961
但它只列印
201903011232101029
我的問題是我們如何使用計算空格的“substr”列印?
我知道,我可以使用此命令來獲得所需的輸出,但這對我的目標沒有幫助
more abbas.dat | awk '{print substr($1,1,16),substr($2,1,5)}'
uj5u.com熱心網友回復:
第一種解決方案:使用您顯示的示例,請嘗試以下awk代碼。用 GNU 撰寫和測驗awk。使用match功能awk來獲得所需的輸出。
要列印第一個欄位,然后是不同的空格,然后是第二個欄位的 5 位數字,請使用以下內容:
awk 'match($0,/^[0-9] [[:space:]] [0-9]{5}/){print substr($0,RSTART,RLENGTH)}' Input_file
或在第一個欄位中列印 16 個字母,從第二個欄位中列印 5 個字母,包括第一和第二欄位之間不同長度的空格:
awk 'match($0,/^([0-9]{16})[^[:space:]] ([[:space:]] )([0-9]{5})/,arr){print arr[1] arr[2] arr[3]}' Input_file
第二種解決方案:使用 GNUgrep請嘗試以下操作,考慮到您的第二列前 4 個需要的值可以是任何值(例如:數字、字母等)。
grep -oP '^\S \s .{5}' Input_file
或僅匹配第二個欄位中的 4 位數字在上面有微小的變化grep。
grep -oP '^\S \s \d{5}' Input_file
uj5u.com熱心網友回復:
如果總是有一個空格,您可以使用以下命令列印第一組,加上第二組的前 5 個字符。
NB 不清楚您是否需要 4 個或 5 個字符,但可以輕松調整。
more abbas.dat | awk '{print $1" "substr($2,1,5) }'
uj5u.com熱心網友回復:
我認為最簡單的方法是在命令中包含“Fs”。
more abbas.dat | awk -Fs '{print substr($1,1,16),substr($1,17,25)}'
uj5u.com熱心網友回復:
$ awk '{print substr($0,1,24)}' file
201903011232101029 29611
如果這不是您所需要的,請編輯您的問題以闡明您的要求。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/447743.html
