ban*_*ana 9 unix linux csv sed
目前我的ff CSV数据存在问题.
COLUMN1,COLUMN2,COLUMN3,COLUMN4
apple1,apple2,apple3,apple4
banana1,banana2,banana3,
caimito1,"caimito21
caimito22","caimito31
caimito32",caimito4
Run Code Online (Sandbox Code Playgroud)
这看起来像这样:
???????????????????????????????????????????????
? COLUMN1 ? COLUMN2 ? COLUMN3 ? COLUMN4 ?
???????????????????????????????????????????????
? apple1 ? apple2 ? apple3 ? apple4 ?
? banana1 ? banana2 ? banana3 ? ?
? caimito1 ? caimito21 ? caimito31 ? caimito4 ?
? ? caimito22 ? caimito32 ? ?
???????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
所以我的计划是添加COLUMN5,它的每一行都有一个值"FRUIT".
使用的命令:
sed "1 s/$/,COLUMN5/g" FILE.csv | sed "2,$ s/$/,FRUIT/g" > OUTPUT.csv
Run Code Online (Sandbox Code Playgroud)
输出:
???????????????????????????????????????????????????????????????????
? COLUMN1 ? COLUMN2 ? COLUMN3 ? COLUMN4 ? COLUMN5 ?
???????????????????????????????????????????????????????????????????
? apple1 ? apple2 ? apple3 ? apple4 ? FRUIT ?
? banana1 ? banana2 ? banana3 ? ? FRUIT ?
? caimito1 ? caimito21FRUIT ? caimito31FRUIT ? caimito4 ? FRUIT ?
? ? caimito22 ? caimito32 ? ? ?
???????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
有没有办法在不影响"caimito"行的情况下添加"FRUIT"?
我也试过了ff.命令,但它没有成功.在"$"之前添加",".
sed "1 s/$/,COLUMN5/g" FILE.csv | sed "2,$ s/,$/,FRUIT/g" > OUTPUT.csv
Run Code Online (Sandbox Code Playgroud)
Sed 可能不是处理 csv 文件的正确工具,因为规则比看起来复杂得多(这可能是可能的,但此类脚本通常很容易出错,等等)。但是,您可以使用以下方法csvtools来处理此问题:
file="FILE.csv"
nr=$(csvtool height $file)
ot=$(perl -e "print \"COLUMN5\\n\";for\$i(2..$nr){print \"FRUIT\\n\";}")
echo "$ot" | csvtool paste "$file" -
Run Code Online (Sandbox Code Playgroud)
该脚本的工作原理如下:
csvtool height,COLUMN5接下来,我们通过打印然后n-1次来生成附加列FRUIT。