[NTLUG:Discuss] Extracting a column out of input

Stuart Johnston saj at thecommune.net
Mon Jan 25 19:28:30 CST 2016


The traditional command for selecting columns of data is 'cut'. The  
problem though is that cut requires a single character separator  
rather than the multiple whitespace dpkg gives you. This is why awk or  
perl would be more flexible.

One solution is to "collapse" the whitespace with 'tr':

dpkg -l | tr -s ' ' | cut -d' ' -f2



Quoting Leroy Tennison <leroy.tennison at verizon.net>:

> The context is I want to extract only the package name out of  
> Ubuntu's 'dpkg -' where the first column is the install status, the  
> second the package name and the rest a description.  More generally  
> though I want to know how to extract any column of data out of a  
> multi-column list.  I've searched the web and found one way to do it  
> but would like to have the flexibility of others without having to  
> resort to awk, perl, etc.  My sense is that there is enough bash  
> experience in this group that I can get an answer here a lot quicker  
> than trying to find exactly what I want on the web.  What I have so  
> far is:
>
> dpkg -l | while read col1 col2 col3; do echo $col2; done
>
> I was trying
>
> for i in `dpkg -l`; do read col1 col2 col3; echo col2; done
>
> but read is expecting stdin.  Adding 'xargs -l1' in front produced  
> "No such file or directory".
>
> Then I tried
>
> while read col1 col2 col3; do echo $col2; done < ls -l
>
> to get a syntax error and
>
> while read col1 col2 col3; do echo $col2; done < `ls -l`
>
> to get "Ambiguous redirect"
>
> What am I doing wrong and what should I do?
>
>
> _______________________________________________
> http://www.ntlug.org/mailman/listinfo/discuss
>





More information about the Discuss mailing list