我有一个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
有人可以帮我解决这个问题吗?
答案 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