Unix剪切:两次打印相同的字段

gho*_*h'. 9 unix shell cut sed

说我有文件 - a.csv

ram,33,professional,doc
shaym,23,salaried,eng
Run Code Online (Sandbox Code Playgroud)

现在我需要这个输出(请不要问我为什么)

ram,doc,doc,
shayam,eng,eng,
Run Code Online (Sandbox Code Playgroud)

我正在使用cut命令

cut -d',' -f1,4,4 a.csv
Run Code Online (Sandbox Code Playgroud)

但产量仍然存在

ram,doc
shyam,eng
Run Code Online (Sandbox Code Playgroud)

这意味着剪切只能打印一次Field.我需要打印相同的字段两次或n次.有什么黑客攻击吗?我只能使用cut或sed命令(请不要使用awk或perl). 我为什么需要这个?(可选阅读)啊.说来话长.我有这样的文件

#,#,-,-
#,#,#,#,#,#,#,-
#,#,#,-
Run Code Online (Sandbox Code Playgroud)

我不得不把它转变为

#,#,-,-,-,-,-
#,#,#,#,#,#,#,-
#,#,#,-,-,-,-
Run Code Online (Sandbox Code Playgroud)

这里每个'#'和' - '指的是不同的数值数据.谢谢.

Gil*_*il' 8

您无法两次打印相同的字段.cut按顺序打印选择的字段(或字符或字节).请参阅在单个命令中组合2个不同的切割输出?使用cut命令对某些非常相似的请求重新排序字段/字符.

如果您的CSV在字段周围没有引号,则此处使用的正确工具是awk.

awk -F , -v OFS=, '{print $1, $4, $4}'
Run Code Online (Sandbox Code Playgroud)

如果你不想使用awk(为什么?有什么奇怪的系统cut,sed但没有awk?),你可以使用sed(仍然假设你的CSV没有字段周围的引号).匹配前四个以逗号分隔的字段,然后按所需顺序选择所需的字段.

sed -e 's/^\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\)/\1,\4,\4/'
Run Code Online (Sandbox Code Playgroud)