2015-09-08 80 views
-1

我有一個文件,其中有由分隔符(本例中爲空格)分隔的列。如何直接將參數傳遞給awk

打印我使用的列,

awk ' { print $1 "," $3 } filename 

此打印由逗號分隔的列1和3。

現在我想發送$1 "," $3作爲參數。所以我可以改變它像$1 "-" $3,我也應該能夠改變後面的參數的數量,如$1 "," $2 "-" $3

目的是動態傳遞字段和分隔符,即。awk命令將在一個文件中,並且該模式應該作爲參數傳遞。有沒有可能

例如。

trigger.sh

#!/bin/bash 

var="\$1\"\,\"\$2" #this is $1","$2 

sh test.sh $var 

test.sh

#!/bin/bash 

awk -v var="$1" ' { print var}' data.dat 

data.dat文件包含實際數據

,但我無法得到所需的輸出。

輸出:

awk: warning: escape sequence `\,' treated as plain `,' 
$1","$2 --> printing this instead of columns 
+0

不要逃脫$,否則你會得到$ 1,$ 2 –

+0

'awk'不支持評估格式化命令。 – anubhava

+0

@MaheshKharvi以同樣的方式嘗試。但它也很有用 –

回答

0

我想動態傳遞參數/變量值。我找到了一個方法來做到這一點。

Str="awk ' { print " 

t="\$1\",\"\$2 } ' " 
# above expression will be passed as an argument and will be assigned to variable t 

Str="$Str""$t""data.dat" 

echo "$Str" 

現在這個字符串str具有價值如下圖所示

awk ' { print $1","$2" } ' data.dat 

現在我們需要做的是

eval $Str 

這個解決方案工作絕對對我很好。