2013-07-05 71 views
0

我有一個巨大的製表符分隔的文件,我正在使用,我試圖根據字符串'汽車'的可用性在第45列中的表子集。這是文件的樣子在Linux中的子集中awk失敗

col1 col2 ... col44 col45 

JPO  JIO ... JKU  car 
JKO  LIC ... YHI  car/kcar 
KJG  KLE ... HIY  tm/car/kcar 

我申請以下命令來執行子集

awk 'BEGIN{IGNORECASE=1} $45 ~ /^car$/ ' filepath | wc 

我得到的有90行作爲文件中的「車」,雖然我以前知道(從excel中查看文件),超過1500行的col45car

任何想法這裏發生了什麼?

謝謝!

+2

我不知道awk是什麼,但是在你的命令裏面是'4',而不是'45'。另外,你混淆了'^'和'$'。 '$'意味着結束,'''開始(至少在我知道的所有正則表達式引擎中)。 –

+1

你想在你的輸出中選擇3個樣品行中的哪一行?你想要$ 45 ==「car」嗎?你想要$ 45包含* word * car:'$ 45〜/ \ /'?你想要$ 45包含人物車:'$ 45〜/ car /'? –

+0

抱歉,我想提出一個簡單的問題,然後我決定詢問原始案例,它是第45欄。結果我仍然得到90。感謝您的更正 – Error404

回答

2

這似乎在GAWK很好地工作(我經常awk沒有IGNORECASE):

$ cat foo.awk 
BEGIN { IGNORECASE = 1; FS = "\t"; } 
$2 ~ /^car/ 
$ cat foo.inp 
l1 notcar 
l2 CAR/blah 
l3 car 
$ gawk -f foo.awk < foo.inp 
l2 CAR/blah 
l3 car 
$ 

(我用$ 2,而$ 45和我假設你想要的東西,車開始,不「正好等於」汽車)

+0

謝謝。你的答案實際上捕獲了逃過上述答案的3個缺失行(在評論中)。乾杯。 – Error404

0

另一個替換的選項:

cut -f45 < file | grep -c '^car' #OR 
cut -f45 < file | grep -c -i '^car' 

應該甚至工作,如果有一個空單元格。