2014-01-26 16 views
0

我有製表符分隔的文件(對不起,我不知道如何格式化它,不應該是空格,但選項卡)。在Mac OSX上使用GAWK的空輸出Maverick

"" "logFC" "logCPM" "LR" "PValue" "FDR" 
"A1BG" -0.2 -1.5 5.3 0.0 0.1 

標記列和行名稱周圍有「」,值沒有。再次,它的製表符分隔。

我的代碼是:

cat file1.csv file2.csv file3.csv | gawk 'NR==1 {if ($1=="something" || $1=="something2") print $1,$2,$4,;}' > test1.txt 

「test1.txt的」 不過是空的,我不知道爲什麼..

所以,如果我跑:

cat file1.csv file2.csv | gawk 'NR==1 {if ($1=="A1BG") print $1,$2,$4,;}' > A1BG.txt 

我想A1BG.txt看起來像:

"" "" "logFC" "LR" 
file1.csv "A1BG" -0.2 5.3 
file2.csv "A1BG" y x 
+0

感謝您的編輯..試圖弄清楚你是怎麼做到的。 – user3236594

+1

當你問一個問題時,你可以點擊一個橙色的問號進行格式化幫助。在文本區域的頂部還有一些有用的圖標。 – larsks

回答

0

什麼是你希望在你的awk動作中用NR==1完成?這意味着您的操作只會在輸入的第一行執行。因此,無論您輸入awk的輸入行數是多少,該行爲將(a)僅運行一次,並且(b)可能不輸出任何內容,除非第一行碰巧與somethingsomething2匹配。

我不是你想要做什麼完全清楚,但也許這將幫助:

gawk ' 
    NR==1 {print} 
    $1 == "something" || $1 == "something2" {print FILENAME, $1,$2,$4} 
' file1.csv file2.csv file3.csv > test1.txt 

這將爲每一行上運行,而不是隻是第一個。如果第一字段是somethingsomething2,它會打印出字段1,2,和4

UPDATE:我修改此以打印輸入的第一行。

+0

NR == 1應該打印出第一行(列名)。 – user3236594

+0

在該位置,「NR == 1」是一個*條件* - 「如果'NR'== 1的值,則執行下面的操作。你的文件只有一個動作。 – larsks

+0

如果要打印除匹配行1,2和4列以外的第一行,請參閱我的更新。 – larsks