Cut command


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Cut command
# 1  
Old 07-07-2014
Cut command

hi,
i have a file
Code:
abc,"an,ab",cde,efg
abc,anab,cde,efg

and need to cut the second field so the output should be abc,cde,efg and i have used
Code:
 cut -d',' -f1-1,3-

but its giving me
Code:
abc,ab",cde,efg
abc,cde,efg


Last edited by Don Cragun; 07-07-2014 at 11:04 PM.. Reason: Change HTML tags to CODE tags, add ICODE tags.
# 2  
Old 07-07-2014
Try tr instead:

Code:
tr -d '"' < input >newfile

the '"' mess is: [single quote][double quote][single quote] no spaces.


IF you did not give us a complete example and this suggestion does not work, PLEASE give complete details.
# 3  
Old 07-07-2014
I can understand changing abc,"an,ab",cde,efg to abc,cde,efg and I can understand changing abc,anab,cde,efg to abc,cde,efg, but I don't understand the logic behind changing:
Code:
abc,"an,ab",cde,efg
abc,anab,cde,efg

to:
abc,cde,efg
Why is there only one line of output from two input lines?
# 4  
Old 07-08-2014
I think you want the commas in quotes not count as field separator.
But cut and awk see all commas as separators.
Fortunately awk is a programming language. Here is a translation into an array:
Code:
awk -F, '
{
  # translate to array s[1],s[2],...
  j=1
  for (i=1; i<=NF; i++) {
    s[j]=$i
    if ($i~/"[^"]+$/) {
      for (k=i+1; k<=NF && $k!~/"/; k++) {
        s[j]=s[j] FS $k
      }
      s[j]=s[j] FS $k
      i=k
    }
    j++
  }
}
{
  sep=""
  for (i=1; i in s; i++) {
  # condition for printing the array elements
    if (i<=1 || i>=3) {
      printf "%s", sep s[i]
      sep=FS
    }
  }
  print ""
}
' file

The second part is an implementation of "cut".

Last edited by MadeInGermany; 07-09-2014 at 04:14 PM.. Reason: allow two " in one field, bug fix
# 5  
Old 07-08-2014
Hi.

I think that the central problem is the topic of comma-separated-value files, csv, not awk, cut, etc..

Here's a script that simply handles such files, along with the utility csvtool:
Code:
#!/usr/bin/env bash

# @(#) s1	Demonstrate csv manipulation, csvtool.

# Utility functions: print-as-echo, print-line-with-visual-space, debug.
# export PATH="/usr/local/bin:/usr/bin:/bin"
LC_ALL=C ; LANG=C ; export LC_ALL LANG
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
C=$HOME/bin/context && [ -f $C ] && $C csvtool

FILE=${1-data1}

pl " Input data file $FILE:"
cat $FILE

pl " Results:"
csvtool col 1,3,4 $FILE

exit 0

producing:
Code:
$ ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.26-2-amd64, x86_64
Distribution        : Debian 5.0.8 (lenny, workstation) 
bash GNU bash 3.2.39
csvtool - ( /usr/bin/csvtool, 2008-05-22 )

-----
 Input data file data1:
abc,"an,ab",cde,efg
abc,anab,cde,efg

-----
 Results:
abc,cde,efg
abc,cde,efg

The command csvtool is in the Debian repositories. Perhaps it is in yours:
Code:
Description: A handy command line tool for handling CSV files
 OCaml CSV is a library to read and write CSV (comma-separated values)
 files.  It also supports all extensions used by Excel - eg. quotes,
 newlines, 8 bit characters in fields, etc.
 .
 This package contains csvtool, a handy command line tool for handling
 CSV files from shell scripts.
Homepage: http://merjis.com/developers/csv

Best wishes ... cheers, drl
This User Gave Thanks to drl For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Cut command: can't make it cut fields

I'm a complete beginner in UNIX (and not a computer science student either), just undergoing a tutoring course. Trying to replicate the instructions on my own I directed output of the ls listing command (lists all files of my home directory ) to My_dir.tsv file (see the screenshot) to make use of... (9 Replies)
Discussion started by: scrutinizerix
9 Replies

2. Shell Programming and Scripting

Cut command

Hi All, I am a beginner learning shell script, Would it be possible to use -c and -f in cut command together ? Example : /opt/oracle/work/Antony/Shell_Script> cat shortlist 2233|a.k. shukula |g.m. |sales2 |12/12/52 |6000 1006|chanchal singhvi ... (3 Replies)
Discussion started by: Antony Ankrose
3 Replies

3. AIX

Need help on cut command

HI, i have data in one variable like out=/usr/sbin/filename and i want output like only out=filename how to do (5 Replies)
Discussion started by: sumanthupar
5 Replies

4. UNIX for Dummies Questions & Answers

Cut pid from ps using cut command

hay i am trying to get JUST the PID from the ps command. my command line is: ps -ef | grep "mintty" | cut -d' ' -f2 but i get an empty line. i assume that the delimiter is not just one space character, but can't figure out what should i do in order to do that. i know i can use awk or cut... (8 Replies)
Discussion started by: ran ber
8 Replies

5. Shell Programming and Scripting

Cut Command error cut: Bad range

Hi Can anyone what I am doing wrong while using cut command. for f in *.log do logfilename=$f Log "Log file Name: $logfilename" logfile1=`basename $logfilename .log` flength=${#logfile1} Log "file length $flength" from_length=$(($flength - 15)) Log "from... (2 Replies)
Discussion started by: dgmm
2 Replies

6. Shell Programming and Scripting

cut command help

n2=user1 pts/3 2010-06-29 01 Now i want to split this string with space(' ') character. After splitting output would be: use1 pts/3 2010-06-29 01 I did: nn=${n2} | cut -d ' ' -f2 echo ${nn} It prints nothing. I want the output: pts/3 (2 Replies)
Discussion started by: cola
2 Replies

7. AIX

Use of Cut Command

Hi All, Can anyone tell me how to use cut command?I have tried but its not working...Please find the details below : $ cat file1 SlNo. E_ID E_Name Age Dept 1 123 A 20 Electrical 2 124 B 20 Electronics 3 125 C 24 Computer 4 126 D 23 Mechanical ... (3 Replies)
Discussion started by: Puja Sharma
3 Replies

8. UNIX for Dummies Questions & Answers

Cut Command help

Hi , I am new to Unix.I have a shell script whenere I wnat to find if a particular server is running and kill all the instances of it (running on different ports) script filename to start the srever is say abcd If i do ps -eaf | grep abc I get all the instances of srever running .In the... (1 Reply)
Discussion started by: shradham
1 Replies

9. UNIX for Dummies Questions & Answers

CUT Command

Hi, Can anyone tell me if I can apply multiple cut on a single variable like below in a sh script: tmp=`cut -c 1-4 $val` tmp1=`cut -c 5-12 $val` tmp2=`cut -c 13-18 $val` If not, what is the other way to do this. Thanks and Best Regards Shoeb (17 Replies)
Discussion started by: shoeb_syed
17 Replies
Login or Register to Ask a Question