How to print the without last column?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to print the without last column?
# 1  
Old 10-25-2014
How to print the without last column?

hi Gurus,

I want print out the file without last column. I am not able to figure out the command , any body can help me this?

thanks in advancd.
# 2  
Old 10-25-2014
Hello Ken6503,

You can do the following. Not tested though, you can try and let us know if this helps.

Code:
awk  '{$NF="\b"} 1'  Input_file
OR
awk '(NF=NF-1) 1' Input_file

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 3  
Old 10-25-2014
Try

Code:
awk 'NF-=1' file

This User Gave Thanks to Akshay Hegde For This Post:
# 4  
Old 10-25-2014
This heavily depends on the OS and command versions, which you fail to mention.
Code:
awk 'NF{NF-=1}1' file

works on my linux machine;
Code:
awk '{$NF=""}1' file

on FreeBSD as well.

@Akshay Hegde: Did you try that on an empty line? (same for RavinderSingh13's second proposal).

Last edited by RudiC; 10-25-2014 at 01:45 PM.. Reason: Typo & adding comments for AH & RS
This User Gave Thanks to RudiC For This Post:
# 5  
Old 10-25-2014
Quote:
Originally Posted by RavinderSingh13
Hello Ken6503,

You can do the following. Not tested though, you can try and let us know if this helps.

Code:
awk  '{$NF="\b"} 1'  Input_file
OR
awk '(NF=NF-1) 1' Input_file

Thanks,
R. Singh
Thanks R.Singh,

the first command works for me. but I have some issue with it. my data as below:
Code:
003875549712|1003875549712|30832
1003897950712|1003897950712|30832
1004928111712|1004928111712|85841
1004928283712|1004928283712|85841
1004928556712|1004928556712|85841

after run command:
Code:
nawk -F'|' '{$NF="\b"}1' OFS='|' test

Code:
003875549712|1003875549712|
1003897950712|1003897950712|
1004928111712|1004928111712|
1004928283712|1004928283712|
1004928556712|1004928556712|

there is extra '|' at end of each line.
how could I fix this?
by the way.
would you please briefly explain what's the "\b" mean?

command
Code:
nawk -F'|' '(NF=NF-1) 1' test

doesn't work for me.
I run it and got same result as input.
Code:
003875549712|1003875549712|30832
1003897950712|1003897950712|30832
1004928111712|1004928111712|85841
1004928283712|1004928283712|85841
1004928556712|1004928556712|85841

My OS is Solaris.

Thanks in advance.

---------- Post updated at 03:34 PM ---------- Previous update was at 03:29 PM ----------

Quote:
Originally Posted by Akshay Hegde
Try

Code:
awk 'NF-=1' file

Thanks Akshay Hegde,
when running this command, I got same result as input file.

Code:
$cat test
003875549712|1003875549712|30832
1003897950712|1003897950712|30832
1004928111712|1004928111712|85841
1004928283712|1004928283712|85841
1004928556712|1004928556712|85841
$nawk -F'|' 'NF-=1' test
003875549712|1003875549712|30832
1003897950712|1003897950712|30832
1004928111712|1004928111712|85841
1004928283712|1004928283712|85841
1004928556712|1004928556712|85841

is this because of OS?

My OS is Solaris.

thanks in advance.

---------- Post updated at 03:41 PM ---------- Previous update was at 03:34 PM ----------

Quote:
Originally Posted by RudiC
This heavily depends on the OS and command versions, which you fail to mention.
Code:
awk 'NF{NF-=1}1' file

works on my linux machine;
Code:
awk '{$NF=""}1' file

on FreeBSD as well.

@Akshay Hegde: Did you try that on an empty line? (same for RavinderSingh13's second proposal).
Thanks RudiC.

command
Code:
awk 'NF{NF-=1}1' file

gave me same data as input file.
command
Code:
awk '{$NF=""}1' file

works, but there is a extra '|' at each end of line.

what's "" mean in $NF=""?

Thanks in advance.

Code:
$cat test
003875549712|1003875549712|30832
1003897950712|1003897950712|30832
1004928111712|1004928111712|85841
1004928283712|1004928283712|85841
1004928556712|1004928556712|85841
$nawk -F'|' 'NF{NF-=1}1' test
003875549712|1003875549712|30832
1003897950712|1003897950712|30832
1004928111712|1004928111712|85841
1004928283712|1004928283712|85841
1004928556712|1004928556712|85841
$nawk -F'|' '{$NF=""}1' OFS='|' test
003875549712|1003875549712|
1003897950712|1003897950712|
1004928111712|1004928111712|
1004928283712|1004928283712|
1004928556712|1004928556712|

# 6  
Old 10-25-2014
Hello Ken,

Following may help you.
Code:
awk -F"|" 'NF{NF=NF-1} 1' OFS="|" Input_file

Output will be as follows.
Code:
003875549712|1003875549712
1003897950712|1003897950712
1004928111712|1004928111712
1004928283712|1004928283712
1004928556712|1004928556712

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 7  
Old 10-25-2014
Quote:
Originally Posted by ken6503
what's "" mean in $NF=""?
NF is a built-in variable that will contain the Number of Fields in the current read record. Therefore:
print NF will display the a number, representing the number of fields
print $NF will display the value of the last field.
$NF="" will set the last field value to empty, erasing the previous content of last field
This User Gave Thanks to Aia For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need awk or Shell script to compare Column-1 of two different CSV files and print if column-1 matche

Example: I have files in below format file 1: zxc,133,joe@example.com cst,222,xyz@example1.com File 2 Contains: hxd hcd jws zxc cst File 1 has 50000 lines and file 2 has around 30000 lines : Expected Output has to be : hxd hcd jws (5 Replies)
Discussion started by: TestPractice
5 Replies

2. Shell Programming and Scripting

Help with subtraction column by column and repeat print out with N

Input file: 2 10 15 20 24 Output file 2 8 NNNNNNNN 10 5 NNNNN 15 5 NNNNN 20 4 NNNN 24 Do anybody experience subtraction column by column and print out number of subtraction times with N? The second column of the output file is the subtraction of 10-2 = 8; The third column just... (3 Replies)
Discussion started by: perl_beginner
3 Replies

3. Shell Programming and Scripting

Help with compare two column and print out column with smallest number

Input file : 5 20 500 2 20 41 41 0 23 1 Desired output : 5 2 20 0 1 By comparing column 1 and 2 in each line, I hope can print out the column with smallest number. I did try the following code, but it don't look good :( (2 Replies)
Discussion started by: perl_beginner
2 Replies

4. Shell Programming and Scripting

awk Print New Column For Every Two Lines and Match On Multiple Column Values to print another column

Hi, My input files is like this axis1 0 1 10 axis2 0 1 5 axis1 1 2 -4 axis2 2 3 -3 axis1 3 4 5 axis2 3 4 -1 axis1 4 5 -6 axis2 4 5 1 Now, these are my following tasks 1. Print a first column for every two rows that has the same value followed by a string. 2. Match on the... (3 Replies)
Discussion started by: jacobs.smith
3 Replies

5. Shell Programming and Scripting

Print every 5 4th column values as separate row with different first column

Hi, I have the following file, chr1 100 200 20 chr1 201 300 22 chr1 220 345 23 chr1 230 456 33.5 chr1 243 567 90 chr1 345 600 20 chr1 430 619 21.78 chr1 870 910 112.3 chr1 914 920 12 chr1 930 999 13 My output would be peak1 20 22 23 33.5 90 peak2 20 21.78 112.3 12 13 Here the... (3 Replies)
Discussion started by: jacobs.smith
3 Replies

6. Shell Programming and Scripting

awk command to print only selected rows in a particular column specified by column name

Dear All, I have a data file input.csv like below. (Only five column shown here for example.) Data1,StepNo,Data2,Data3,Data4 2,1,3,4,5 3,1,5,6,7 3,2,4,5,6 5,3,5,5,6 From this I want the below output Data1,StepNo,Data2,Data3,Data4 2,1,3,4,5 3,1,5,6,7 where the second column... (4 Replies)
Discussion started by: ks_reddy
4 Replies

7. Shell Programming and Scripting

comparing column of two different files and print the column from in order of 2nd file

Hi friends, My file is like: Second file is : I need to print the rows present in file one, but in order present in second file....I used while read gh;do awk ' $1=="' $gh'" {print >> FILENAME"output"} ' cat listoffirstfile done < secondfile but the output I am... (14 Replies)
Discussion started by: CAch
14 Replies

8. Shell Programming and Scripting

print first few lines, then apply regex on a specific column to print results.

abc.dat tty cpu tin tout us sy wt id 0 0 7 3 19 71 extended device statistics r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device 0.0 133.2 0.0 682.9 0.0 1.0 0.0 7.2 0 79 c1t0d0 0.2 180.4 0.1 5471.2 3.0 2.8 16.4 15.6 15 52 aaaaaa1-xx I want to skip first 5 line... (4 Replies)
Discussion started by: kchinnam
4 Replies

9. Shell Programming and Scripting

find expression with awk in only one column, and if it fits, print whole column

Hi. How do I find an expression with awk in only one column, and if it fits, then print that whole column. 1 apple oranges 2 bannanas pears 3 cats dogs 4 hesaid shesaid echo "which number:" read NUMBER (user inputs number 2 for this example) awk " /$NUMBER/ {field to search is field... (2 Replies)
Discussion started by: glev2005
2 Replies

10. Shell Programming and Scripting

Question about sort specific column and print other column at the same time !

Hi, This is my input file: ali 5 usa abc abu 4 uk bca alan 6 brazil bac pinky 10 utah sdc My desired output: pinky 10 utah sdc alan 6 brazil bac ali 5 usa abc abu 4 uk bca Based on the column two, I want to do the descending order and print out other related column at the... (3 Replies)
Discussion started by: patrick87
3 Replies
Login or Register to Ask a Question