是否可以使用 sed 在几列中放置双引号?

Fel*_*rte 1 sed text-processing csv columns

我正在完成我的课程完成工作,我需要操作具有 60 万行的 .csv 文件的某些列。我已经在几个关于 sed 和 awk 的论坛中搜索过,但没有找到类似的东西(不幸的是,我对 Linux 的了解不是很深)。我发现通常只处理一列或全部......我需要的是只在第一、第五和第六列中放置双引号。

例如:

2018-03-18 4:56:17,255.255.255.255,00,ssh,admin,123
Run Code Online (Sandbox Code Playgroud)

成为

"2018-03-18 4:56:17",255.255.255.255,00,ssh,"admin","123"
Run Code Online (Sandbox Code Playgroud)

不过,也许我还是会更改一些专栏,因为我刚刚开始从事数据挖掘,我不知道几周后的配置会是什么样子,所以如果你能做一个简单的逻辑语法,我将永远感激.

agc*_*agc 6

使用csvtoolwhich 有一个有用的format命令:

csvtool format '"%1",%2,%3,%4,"%5","%6"\n' file.csv 
Run Code Online (Sandbox Code Playgroud)

例子:

echo "2018-03-18 4:56:17,255.255.255.255,00,ssh,admin,123" |
csvtool format '"%1",%2,%3,%4,"%5","%6"\n' -
Run Code Online (Sandbox Code Playgroud)

输出:

"2018-03-18 4:56:17",255.255.255.255,00,ssh,"admin","123"
Run Code Online (Sandbox Code Playgroud)

csvtool也可以使用callshell 函数和外部程序来解析.CSV文件中的行。要使用 做同样的事情printf,但以十六进制打印“ 123 ”,请执行以下操作:

echo "2018-03-18 4:56:17,255.255.255.255,00,ssh,admin,123" | 
csvtool call "printf '\"%s\",%s,%s,%s,\"%s\",\"%x\"\n'" -
Run Code Online (Sandbox Code Playgroud)

输出:

"2018-03-18 4:56:17",255.255.255.255,00,ssh,"admin","7b"
Run Code Online (Sandbox Code Playgroud)