[英]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.