在每行末尾添加分隔符

时间:2018-02-20 06:50:14

标签: awk sed

我有一个像下面这样的csv文件。

if (isset($_POST['extra'])) {
    $query=mysqli_query($con,"select price from extras where name_of_extra ='$_POST[extra]'");
    while ($row = mysqli_fetch_array($query)) {
       echo json_encode($row['price'],JSON_NUMERIC_CHECK);
    }
}

现在我想为每一行添加逗号(,)以使所有行具有相同数量的分隔符。所以期望的输出应该是。

id,id1,id2,id3,id4,id5
1,101,102,103,104
2,201,202,203
3,301,302

使用

id,id1,id2,id3,id4,id5
1,101,102,103,104,
2,201,202,203,,
3,301,302,,,

我能够找到分隔符的最大出现但不确定如何比较每一行并添加逗号,如果它小于最大值。

5 个答案:

答案 0 :(得分:4)

使用GNU awk(因为我不知道这是否适用于其他实现)

$ # simply assign value to NF
$ awk -F, -v OFS=',' '{NF=6} 1' ip.txt
id,id1,id2,id3,id4,id5
1,101,102,103,104,
2,201,202,203,,
3,301,302,,,

如果第一行确定所需的字段数:

$ awk -F, -v OFS=',' 'NR==1{f=NF} {NF=f} 1' ip.txt
id,id1,id2,id3,id4,id5
1,101,102,103,104,
2,201,202,203,,
3,301,302,,,

如果任何行确定最大字段:

$ cat ip.txt 
id,id1,id2
1,101,102,103
2,201,202,203,204
3,301,302

$ awk -F, -v OFS=',' 'NR==FNR{f=(!f || NF>f) ? NF : f; next} {NF=f} 1' ip.txt ip.txt
id,id1,id2,,
1,101,102,103,
2,201,202,203,204
3,301,302,,

答案 1 :(得分:2)

您已经在使用变量NF,它表示一行中有多少个字段。

awk -F , 'NF<6 { OFS=FS; for (i=NF+1; i<=6; i++) $i="" }1' filename

我们开始在第一个未定义字段循环并将其设置为空字符串,直到我们有六个字段。然后最后的1负责打印现在完全填充的行。 OFS=FS是使输出字段分隔符也是逗号(默认为空格)所必需的。

答案 2 :(得分:2)

统一 awk 方法(基于第一个标题行的字段数):

awk -F',' 'NR==1{ max_nf=NF; print }
           NR>1{ printf "%s%.*s\n", $0, max_nf-NF, ",,,,,,,,," }' file

输出:

id,id1,id2,id3,id4,id5
1,101,102,103,104,
2,201,202,203,,
3,301,302,,,

或通过循环:

awk -F',' 'NR==1{ max_nf=NF; print }
           NR>1{ n=max_nf-NF; r=""; while (n--) r=r","; print $0 r }' file

答案 3 :(得分:2)

     @NonNull
    @Override
    public View getView(int position, View convertView, @NonNull ViewGroup parent)
     {
    viewHolder.ratess= (RatingBar) convertView.findViewById(R.id.ratess);
     viewHolder.ratess.setRating(yourModel.getRatingValue());

}

输出:

awk -F"," '{i=NF;c="";while (i++ < 6) {c=c","};print $0""c}' file

答案 4 :(得分:2)

关注awk也可以帮助您。

awk -F, '
FNR==1{
  val=NF;
  print;
  next
}
{
  count=NF;
  while(count<val){
    value=value",";
    count++};
  print $0 value;
  value=count=""
}
'   Input_file

输出如下:

id,id1,id2,id3,id4,id5
1,101,102,103,104,
2,201,202,203,,
3,301,302,,,