2016-12-06 18 views
1

假設我有一個製表符分隔的文件,第一列是某種指數:提取一個行,如果一列檢查出是一個特定的值 - 的Unix

$ echo -e "0\tabc\txyz\n1\twhatever ever\tfoobar\n0\t12f2\t1" > test.txt 
$ cat test.txt 
0 abc xyz 
1 whatever ever foobar 
0 12f2 1 

而且我想提取行其中在第一列中的索引是特別0或1

我可以在Python做到這一點:

$ python -c "print '\n'.join([line.strip() for line in open('test.txt') if line.split('\t')[0] == '0'])" 

0 abc xyz 
0 12f2 1 

但是噸的什麼是SED/AWK(或任何Unix工具)等效他短python腳本?

+1

'的awk '$ 1 == 0' test.txt' – jordanm

+0

@jordanm你應該張貼,作爲它的正確答案AWK。 –

+0

如果第一個字段是「00」或「01」(然後是一些),它會失敗。 –

回答

1

這裏所有其他答案都使用正規表達式,並且還遇到了匹配「01」,「11」,「12」等問題。隨着awk,您可以測試字符串相等:

awk '$1 == 0' test.txt 
awk '$1 == 1' test.txt 
awk '$1 <= 1' test.txt 
+0

如果第一個字段是「00」或「01」,這些也會失敗。看到我的答案。 –

1

隨着SED:

sed '/^0\t/!d' test.txt 
1

獲取所有行開始0

grep '^0' file 

獲取所有行開始01

grep '^\(0\|1\)' file 
+0

這匹配'11',這可能不是渴望的。 – jordanm

0

Awk版本:

  • 對於前導0行:

    AWK '/^0 /'

  • 對於前導1行:

    AWK '/^1 /'

Sed版本:

  • 對於

    前導0行:

    的sed -n '/^0/P'

  • 對於前導1行:

    的sed -n '/^1/P'

2

如果我們正在尋找的記錄,其中第一列是特別爲0或1

首先是一些試驗材料:

$ cat file 
0 yes sir 
1 yes sir 
10 nope 
01 nope 
00 nope 

In awk:

$ awk '$1 == "1" || $1 == "0"' file 
0 yes sir 
1 yes sir 

這些會失敗:

$ awk '$1 == 0' file 
0 yes sir 
00 nope 
$ awk '$1 == 1' file 
1 yes sir 
01 nope 
+0

你說得對,報價很重要。 +1 – jordanm

相關問題