Danny
Danny

Reputation: 65

How to delete first three columns in a delimited file

For example, I have a csv file as follow,

12345432|1346283301|5676438284971|13564357342151697 ...
87540258|1356433301|1125438284971|135643643462151697 ...
67323266|1356563471|1823543828471|13564386436651697 ...

and hundreds more columns but I want to remove first three columns and save to a new file(if possible same file would be better for me)

This is the result I want.

13564357342151697 ...
135643643462151697 ...
13564386436651697 ...

I have been looking and trying but I am not able to do it. And below is the code I have.

awk -F'|' '{print $1 > "newfile"; sub(/^[^|]+\|/,"")}1' old.csv > new.csv

Appreciate if someone can help me. Thank you.

Upvotes: 2

Views: 1468

Answers (4)

Claes Wikner
Claes Wikner

Reputation: 1517

awk -F\| '{print $NF}' file >newfile

13564357342151697 ...
135643643462151697 ...
13564386436651697 ...

Upvotes: 0

SVTAnthony
SVTAnthony

Reputation: 461

This is what you're looking for:

awk -F '|' '{$1=$2=$3=""; print $0}' oldfile > newfile

But it will have leading whitespaces so then add the following substitution:

sub(/^[ \t\|]+/,"") --> changed to sub(/^[ \t\|]+/,"") (escaped leading '|' from column removal)

awk -F '|' '{$1=$2=$3="";OFS="|";sub(/^[ \t\|]+/,"") ;print $0}' oldFile > newFile

Upvotes: 1

RavinderSingh13
RavinderSingh13

Reputation: 133528

@Heng: try:

awk -F"|" '{for(i=4;i<=NF;i++){printf("%s%s",$i,i==NF?"":"|")};print ""}'  Input_file

OR

awk -F"|" '{for(i=4;i<=NF;i++){printf("%s%s",$i,i==NF?"\n":"|")};}'  Input_file

you could re-direct this command's output into a file as per your need.

EDIT:

awk -F"|" 'FNR==1{++e;fi="REPORT_A1_"e;} {for(i=4;i<=NF;i++){printf("%s%s",$i,i==NF?"\n":"|") > fi}}'   Input_file1  Input_file2  Input_file3

Upvotes: 1

Bertrand Martel
Bertrand Martel

Reputation: 45402

You can use cut :

cut -f4- -d'|' old.csv  > new.csv

Upvotes: 4

Related Questions