2013-10-17 65 views
0

我正尝试使用bash和awk以及嵌套的for循环将数据打印到彼此旁边的列中。 到目前为止,这是我所:使用bash和awk打印到新文档中的特定列

for k in {1..147..3} 
do 
for i in "52" "64" "60" "70" "74" 
do 
     awk -v x="${i}" -F, 'match ($0,x) { print $k }' all.csv > final.csv 
done 
done 
echo "script has run" 

我需要打印出的信息到新文件中的k列。但是不起作用。 所以在CSV文件中的数据是这样的:

52,9/05,6109 
52,9/06,6119 
64,9/05,7382 
64,9/06,7392 
64,9/07,3382 
60,9/06,3829 
... 

我想我的输出是这样的:

52,9/05,6109,64,9/05,7382,60,9/06,3829 
52,9/06,6119,64,9/06,7392 
,,,64,9/07,3382 

基本上,所有的52S在第一列,第四列中的64S,60年代在第七列

回答

1

而不是print $k,使用printf "%s,",$k

printf是许多语言通用的打印格式化程序函数。 %s告诉它第一个参数应该是一个字符串。

请注意,awk将不会从shell中获得$k,因此您需要添加-v k=$k

+0

这给了我一个错误..但你能解释一下这些术语是什么意思吗?我认为与解释它可能会帮助我更好地理解它 – user2883071

+0

它给你什么错误? – Kevin

+0

awk:(FILENAME = all.csv FNR = 21910)fatal:没有足够的参数来满足格式字符串 '%s' – user2883071