Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Awk: extract different columns from many different files

Tags:

file

awk

File Example

I have a 3-10 amount of files with:

 - different number of columns
 - same number of rows
 - inconsistent spacing (sometimes one space, other tabs, sometimes many spaces) **within** the very files like the below


>      0    55.4      9.556E+09   33
>      1     1.3      5.345E+03    1
>        ........
>     33   134.4      5.345E+04  932
>
       ........

I need to get column (say) 1 from file1, column 3 from file2, column 7 from file3 and column 1 from file4 and combine them into a single file, side by side.

Trial 1: not working

paste <(cut -d[see below] -f1 file1) <(cut -d[see below] -f3 file2) [...]

where the delimiter was ' ' or empty.

Trial 2: working with 2 files but not with many files

awk '{
     a1=$1;b1=$4;
     getline <"D2/file1.txt";
     print a1,$1,b1,$4
}' D1/file1.txt >D3/file1.txt

Now more general question:

How can I extract different columns from many different files?

like image 853
astabada Avatar asked Oct 05 '12 12:10

astabada


1 Answers

In your paste / cut attempt, replace cut by awk:

$ paste <(awk '{print $1}' file1 ) <(awk '{print $3}' file2 ) <(awk '{print $7}' file3) <(awk '{print $1}' file4)
like image 123
mouviciel Avatar answered Oct 09 '22 19:10

mouviciel