将文本垂直粘贴到.CSV文件中

时间:2014-04-19 17:19:16

标签: csv awk

我有这个awk脚本将文本文件写入.cvs文件中的特定单元格,但我试图让文本垂直显示,而不是水平显示。

`nawk -v r=2 -v c=3 '
BEGIN { FS=OFS=","
}
FNR == NR {
    val = sprintf("%s%s%s", val, NR > 1 ? " " : "", $0)
    next
}
FNR == r {
    $c = val
}
1' file new_one.csv`

想要

the  
text  
like   
this

2 个答案:

答案 0 :(得分:0)

你不能这样做:

val = sprintf("%s%s%s", val, NR > 1 ? " " : "", $0) + '\n'

文档here

答案 1 :(得分:0)

假设csv输入文件如:

a,b,c
d,e,f
g,h,i
k,l,m

和您想要的数据垂直相似:

This file has words horizontally

这是修改脚本的一种方法:

NR==FNR {gsub(" ","\n"); val="\""$0"\""; next}

这将使用换行符替换$0中的所有单个空格。然后整行被分配到val,但每个wikipedia's csv page用双引号括起来。

使用我从命令行创建的数据文件运行它(使用的语法与FS/OFS使用的语法略有不同):

awk -F"," -v r=2 -v c=3 'NR==FNR{gsub(" ","\n"); val="\""$0"\""; next} FNR==r {$c=val} 1' OFS="," vert data
a,b,c
d,e,"This
file
has
words
horizontally"
g,h,i
k,l,m

其中vert是垂直数据的名称,data是csv数据文件的名称。请注意,f处的[2,3]已替换为vert文件中已更改的输入。

请注意,您选择的行/列索引仅在data文件中没有任何字段包含内部逗号并且awk不是您最好的时才有效一般来说,解析csv文件的朋友。