在CSV文件中打印第一个,倒数第二个和最后一个字段

时间:2016-06-09 14:15:00

标签: csv unix command cut

我有20000行和5列的大逗号分隔文件,我想提取特定的列,但是有更多的值,所以更多的逗号,除了标题,所以如何剪切这样的列。

示例文件:

name,v4,v5
as,5,7
bs,9,3

这是我想要的输出:

cut -d, -f1,5,6

我尝试按照剪切命令但没有工作

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ImageView meter=(ImageView)findViewById(R.id.imageView);
    meter.setScaleType(ImageView.ScaleType.FIT_CENTER);

    Bitmap meterIcon =   BitmapFactory.decodeResource(getResources(),   R.mipmap.andes);

    Display display = getWindowManager().getDefaultDisplay();
    int width = (display.getWidth());
    int height = display.getHeight();

    meter.setMinimumWidth(width);
    meter.setMinimumHeight(height);

    meter.setMaxWidth(width);
    meter.setMaxHeight(height);
    meter.setImageBitmap(meterIcon);






   }
}

2 个答案:

答案 0 :(得分:1)

通常,对于这些场景,最好使用正确的csv解析器。例如,您可以在Python中找到它们。

但是,由于您的数据似乎只是在一开始就有逗号字段,您可以决定打印第一个字段,然后是倒数第二个字段和最后一个字段:

$ awk 'BEGIN{FS=OFS=","} {print $1, $(NF-1), $NF}' file
name,v4,v5
as,5,7
bs,9,3

答案 1 :(得分:0)

TXR Lisp中:

$ txr extract.tl < data
name,v4,v5
as,5,7
bs,9,3

extract.tl中的代码:

(mapdo
  (lambda (line)
    (let ((f (tok-str line #/"[^"]*"|[^,]+/)))
      (put-line `@[f 0],@[f 4],@[f 5]`)))
  (get-lines))

作为浓缩的衬垫:

$ txr -t '(mapcar* (do let ((f (tok-str @1 #/"[^"]*"|[^,]+/)))
                     `@[f 0],@[f 4],@[f 5]`) (get-lines))' < data