使用awk或sed添加空白列

时间:2014-06-25 06:56:35

标签: shell unix awk sed

我有一个具有以下结构的文件(以逗号分隔)

116,1,89458180,17,FFFF,0403254F98

我想在第4个字段上添加一个空白列,使其变为

116,1,89458180,,17,FFFF,0403254F98

如果可能,有关如何使用awk或sed执行此操作的任何输入?

谢谢

7 个答案:

答案 0 :(得分:3)

假设没有任何字段包含嵌入的逗号,您可以将任务重新用两个逗号替换第三个逗号。这只是:

sed 's/,/,,/3'

使用文件中的示例行:

$ echo "116,1,89458180,17,FFFF,0403254F98" | sed 's/,/,,/3'
116,1,89458180,,17,FFFF,0403254F98

答案 1 :(得分:2)

您可以使用此awk

awk -F, '$4="," $4' OFS=, yourfile

(OR)

awk -F, '$4=FS$4' OFS=, yourfile

如果要添加第6和第8个字段,

awk -F, '{$4=FS$4; $1=FS$1; $6=FS$6}1' OFS=, yourfile

答案 2 :(得分:2)

通过awk

$ echo '116,1,89458180,17,FFFF,0403254F98' | awk -F, -v OFS="," '{print $1,$2,$3,","$4,$5,$6}'
116,1,89458180,,17,FFFF,0403254F98
  • ,
  • 之后的第三个字段(分隔)之后打印,

通过GNU sed

$ echo 116,1,89458180,17,FFFF,0403254F98| sed -r 's/^([^,]*,[^,]*,[^,]*)(.*)$/\1,\2/'
116,1,89458180,,17,FFFF,0403254F98
  • 它捕获第三个命令的所有字符并将其存储到一个组中。包括第三个,到最后一个的字符存储在另一个组中。在替换部分中,我们只在这两个捕获的组之间添加,。 通过Basic sed,

通过基本sed

$ echo 116,1,89458180,17,FFFF,0403254F98| sed 's/^\([^,]*,[^,]*,[^,]*\)\(.*\)$/\1,\2/'
116,1,89458180,,17,FFFF,0403254F98

答案 3 :(得分:0)

echo 116,1,89458180,17,FFFF,0403254F98|awk -F',' '{print $1","$2","$3",,"$4","$5","$6}'

答案 4 :(得分:0)

非AWK

t="116,1,89458180,17,FFFF,0403254F98"
echo $(echo $t|cut -d, -f1-3),,$(echo $t|cut -d, -f4-)

答案 5 :(得分:0)

您可以使用bellow awk命令来实现该目标。使用您希望将其变为空白的列放置$ 3。

awk -F,'{$ 3 =“”FS $ 3;} 1'OFS =,filename

答案 6 :(得分:0)

sed -e 's/\([^,]*,\)\{4\}/&,/' YourFile

替换4个[内容(非逗号)而不是逗号]的序列,后跟一个逗号