使用shell脚本从文件中提取行

时间:2015-05-07 10:52:08

标签: bash shell unix

我有一个CSV文件,其中的列如下,

User     Name   Env   Role
user1    pap    dev    dev
user2    nic    uat    test

我需要针对“Env”或“User”列提取一行。 我写的脚本'extract.sh'是

k=$2
field=$3
head -1 $1; cat $1 | awk -F "," -v k=`echo $k` -v field=`echo $field` '{ k=k;j=$field; if ( j==k )  print $0}'

使用3个参数调用脚本, sh extract.sh username.csv dev 3 第一个参数是csv文件,第二个是值,第三个是列号, 我得到的输出是

User Name Env Role
user1 pap dev  dev

但我需要像这样的输出,

User = user1 
Name = pap
Env = dev
Role = dev

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

你可以使用这个awk:

awk -F, -v RS='\r\n' -v col=$3 -v val="$2" 'NR==1 {for (i=1; i<=NF; i++) hdr[i]=$i;next}
             $col == val {for (i=1; i<=NF; i++) print hdr[i], "=", $i; exit}' "$1"
User = user1
Name = pap
Env = dev
Role = dev

<强>解释

NR == 1      # For first row save headers in an array called hdr
$col == val  # when passed val is same as the value of column indicated by col