簡體   English   中英

awk FS是一個正則表達式

[英]awk FS is a regular expression

我的問題是無法輸出以FS設置為正則表達式的已處理文件。 我有一個必須處理的文件:

id 1:1 2:1 3:2 5:1
id 1:2 3:1 4:1

我想將值(在“:”之后)乘以2:

id 1:2 2:2 3:4 5:2
id 1:4 3:2 4:2

我試過了 :

awk 'BEGIN {FS=" [[:digit:]]+:"}{OFS=FS}{for (i=2; i<=NR;i++) $i=$i*2; print}' file

但是,它為我提供了文字[[:digit:]]+:作為FS。 我在這里提出了類似的問題,並嘗試將字段設置為記錄,最后打印了$0, RT ,但它也沒有用。

感謝您的提示。

您可以使用split功能

$ awk '{for(i=2; i<=NF; i++){split($i,a,":"); a[2]*=2; $i=a[1]":"a[2]}} 1' file
id 1:2 2:2 3:4 5:2
id 1:4 3:2 4:2


或更簡單的perl解決方案,將:之后的所有數字都乘以2

$ perl -pe 's/:\K\d+/$&*2/ge' file
id 1:2 2:2 3:4 5:2
id 1:4 3:2 4:2

使用gawk,您可以在split函數的僅gawk的額外參數中捕獲字段分隔符(類似於RT ):

BEGIN {FS=" [[:digit:]]+:"}

{
    split($0,a,FS,seps);
    printf "%s", a[1];
    for (i=2; i<=length(a); ++i)
      {printf "%s%s", seps[i-1], a[i]*2}
    print ""
}

$ awk -f mirr.awk mirr.txt
id 1:2 2:2 3:4 5:2
id 1:4 3:2 4:2

暫無
暫無

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

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