【发布时间】:2021-02-09 07:06:08
【问题描述】:
我正在研究汽车数据集;汽车品牌和型号显示在如下字符串中。你可以假设模型只有一个词。
"Honda civic LX"
"audi 500s (diesel)"
"toyota camry"
"ford ranger"
我想要的输出是在单引号中包含 make(由单个单词组成),而模型和 trim 是在它们自己的单引号中,如下所示:
'honda' 'civic LX'
'audi' '500s (diesel)'
'toyota' 'camry'
'ford' 'ranger'
我还应该注意我使用的数据集是这样组织的。
28.0 4 119 82.0 2720 99 1 "audi 500s (diesel)"
23.5 4 225 76.0 5530 81 1 "toyota camry"
我想用 SED 解决它,我已经接近通过以下命令解决它。
sed "s/\"/'/g;s/ /' '/"
但是,这使我的数据集如下所示。你可以看到它在第一列的末尾添加了一个'',这不是我想要的。另外,我认为该命令会分开品牌和型号,但事实并非如此。
28.0' ' 4 119 82.0 2720 99 1 'audi 500s (diesel)'
23.5' ' 4 225 76.0 5530 81 1 'toyota camry'
【问题讨论】:
-
sed -E 's/"([^" ]+) +([^"]+)"$/'"'\1' '\2'/" -
awk -F\" -v q=\' '{sub(/ /,q" "q,$2);$2=q$2q}1' -
@jhnc 谢谢!您介意分解 SED 命令吗?
-
除了对单引号/双引号进行稍微神秘的转义外,它只是一个简单的
s///命令。见:regex101.com/r/pMjctB/1 -
@jhnc 非常感谢。您提供的链接真的很有帮助,我以后一定会使用它!
标签: awk sed command-line