使用shell脚本格式化文件内容



大家好,我是shell编程的初学者。在日常工作中,我需要将文件的数据转换为另一种格式,我通常使用文本编辑器手动完成。但是我经常犯错误。所以我决定编写一个简单的脚本,可以为我做这项工作。文件的内容如下

/release201209
a1,a2,"a3",a4,a5
b1,b2,"b3",b4,b5
c1,c2,"c3",c4,c5

:

a2>a3
b2>b3
c2>c3 

脚本应该忽略第一行并打印以'>'分隔的第二和第三个值我已经完成了一半,这是我的代码

#!/bin/bash
cat $1 | sed '1d' | cut -d, -f2-3 | tr -d '"' > $2

它工作得很好,直到我发现它不适合a3中包含逗号的数据类型,就像这样:data,VERSION,"FUNDS.TRANSFER,ASS.VERS.TIERS.BOP",,它返回VERSION>FUNDS.TRANSFER而不是VERSION>FUNDS.TRANSFER,ASS.VERS.TIERS.BOP

你能帮我更新一下吗?由于

考虑使用适当的CSV解析工具(如csvtool)来提取相关列(它更容易&比推出自己的解析更可靠)。然后,使用tr/sed进行必要的转换:

sed '1d' file.txt | csvtool -t ',' col 2,3 - | tr -d '"' | sed 's/,/>/'

步骤:

  • 使用sed
  • 删除标题行
  • 使用csvtool提取第二和第三列
  • 使用tr删除双引号
  • 使用sed第一个,映射到>(您不能使用tr,因为它会进行全局转换)

你可以在软件包管理器中安装csvtool,例如在基于debian的系统上安装sudo apt-get install csvtool。将apt-get替换为其他系统上的软件包管理器,例如yum,brew,…

Ruby包含了一个CSV模块:

ruby -rcsv -e '
CSV.read(ARGV.shift).map {|row| 
printf "%s>%sn", row[1], row[2]
}
' file | sed 1d

输入图片描述

你好先生,我也在学习一个shell脚本,你想要这样吗??

这是我的代码

function klir(){
line2=$(cut -d, -f1 $1 > $1.temp.filterline2)
line3=$(cut -d" -f2 $1 > $1.temp.filterline3)
paste $1.temp.filterline2 $1.temp.filterline3 | sed "s/t/>/g ; 1d"
rm $1.temp.filterline2 $1.temp.filterline3 2>/dev/null 
}
klir $1 

相关内容

  • 没有找到相关文章

最新更新