我有以下形式的数据库转储文件
('value1','value2',value3','value4'),('value1','value2',value3','value4'),...
我首先希望将每个元组放在一行中,然后我只想导出一个值(即:每个元组中的 value3)
答案1
将每个元组放在单独的行上:
sed 's@)\s*,\s*(@)\n(@g' your_file
要将修改应用于文件(而不是将修改后的文件打印到标准输出):
sed -i 's@)\s*,\s*(@)\n(@g' your_file
仅报告value3
(假设文件已修改):
awk -F',' '{print $3}' <your_new_file
这假设值本身不包含,
.请参阅下面迈克尔的评论。
一次性完成所有操作(无需修改文件):
sed 's@)\s*,\s*(@)\n(@g' your_file | awk -F',' '{print $3}'
为了简化上面的awk
调用,我利用了这样一个事实:根据您的示例,我们可以将输入拆分为,
和value3
将是第三个值,并且其中没有括号。如果您愿意value1
或者value4
相反,您可以执行以下操作:
sed 's@)\s*,\s*(@)\n(@g' your_file | awk -F',' '{print $1}' | sed 's/[()]//'
当然,这假设您的值的内容中没有括号。