2012-10-05 25 views
2

文件示例awk中:從許多不同的文件中提取不同的列

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 
> 
     ........ 

我需要從文件4從文件3和第1列獲得列(說)1從文件1,從文件2 3列,第7列和將它們並排放入一個文件中。

試驗1:沒有工作

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

其中分隔符是 '' 或空。

試驗2:與2檔工作,但不是很多文件

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

現在更普遍的問題:

我如何可以提取不同的列許多不同的文件?

+0

如何使用'cut'和'paste'不行? – 2012-10-05 12:34:31

+1

我認爲這是因爲cut假定間距是恆定的。我使用不同的間距格式化數據,以便在每列的左側有數字。如果一個數字有更多的數字,那麼它的左邊會有更少的空間。 – astabada

回答

12

在你paste/cut嘗試,通過awk更換cut

$ paste <(awk '{print $1}' file1) <(awk '{print $3}' file2) <(awk '{print $7}' file3) <(awk '{print $1}' file4) 
+1

paste <(awk'{print $ 1}'file1)<(awk'{print $ 3}'file2)<(awk'{print $ 7}'file3)<(awk'{print $ 1}'file4) – astabada

+0

這是* *完全**我需要的,快速和容易。乾杯! – astabada

1

cutpaste的組合應該工作:

$ cat f1 
foo 
bar 
baz 
$ cat f2 
1 2 3 
4 5 6 
7 8 9 
$ cat f3 
a b c d 
e f g h 
i j k l 
$ paste -d' ' <(cut -f1 f1) <(cut -d' ' -f2 f2) <(cut -d' ' -f3 f3) 
foo 2 c 
bar 5 g 
baz 8 k 

編輯:這適用於標籤,也:

$ cat f4 
a  b  c  d 
e  f  g  h 
i  j  k  l 
$ paste -d' ' <(cut -f1 f1) <(cut -d' ' -f2 f2) <(cut -f3 f4) 
foo 2 c 
bar 5 g 
baz 8 k 
+1

這個例子的作品,但只是爲了一致的間距......我的問題有不明確之處,對不起。我的意思是文件本身的間距不一致。 – astabada

6

假設每個文件具有相同數量以下是使用GNU awk的一種方法。運行,如:中script.awk

awk -f script.awk file1.txt file2.txt file3.txt file4.txt 

內容:

FILENAME == ARGV[1] { one[FNR]=$1 } 
FILENAME == ARGV[2] { two[FNR]=$3 } 
FILENAME == ARGV[3] { three[FNR]=$7 } 
FILENAME == ARGV[4] { four[FNR]=$1 } 

END { 
    for (i=1; i<=length(one); i++) { 
     print one[i], two[i], three[i], four[i] 
    } 
} 

注:

默認情況下,awk上的空白分開列。這包括製表符和空格以及其中的任意數量。這使得awk非常適合間距不一致的文件。如果您願意,您還可以展開上述代碼以包含更多文件。

+1

+1對題目的真正答案。也許最好的回答我的問題[這裏](http://stackoverflow.com/questions/18602414/how-to-read-many-input-files-in-awk)也。 – hhh

相關問題