[英]grep: Keeping lines that has specific string in certain column
我試圖找出某些列中具有特定值的行並將其保存到輸出中。 我試圖用grep這樣做。 可能嗎?
我的數據如下所示:
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
melon 1 ewtedf wersdf
orange 3 qqqwetr hredfg
我想在第二列中挑選出值為5的行並將其保存到新的outputfile中。
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
我很感激你的幫助!
grep
可能是可能的,但執行此操作的適當工具肯定是awk
。 您可以過濾第二列上每行5的行
awk '$2 == 5'
awk
將其輸入分為記錄(通常是一行)和字段(通常是一列),並對符合特定條件的記錄執行操作。 這里
awk '$2 == 5'
是一個簡短的表格
awk '$2 == 5 {print($0)}'
轉化為
For each record, if the second field ($2) is 5, print the full record ($0).
如果您需要動態選擇用於過濾值的鍵值,請使用awk
的-v
選項:
awk -v "key=5" '$2 == key {print($0)}'
如果您需要保留文件的第一行,因為它包含表的標題,請使用跟蹤當前記錄的序號的NR
變量:
awk 'NR == 1 || $2 == 5'
字段分隔符是一個正則表達式,用於定義哪些文本分隔列,可以使用-F
字段進行修改。 例如,如果您的數據位於基本CSV文件中,則過濾器將是
awk -F", *" '$2 == 5'
訪問awk標簽wiki,找到一些有用的信息,開始學習awk
。
要在第二個字段為5
時打印,請使用: awk '$2==5' file
嘗試一下:
grep '^[^\s]\+\s5.*$' file.txt
模式查找行的開頭,后跟多個非空格字符,后跟空格,后跟5,后跟任意數量的字符,然后是eol。
您可以獲得以下命令。
$ cat data.txt
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
melon 1 ewtedf wersdf
orange 3 qqqwetr hredfg
grape 55 kkkkkkk aaaaaa
$ grep -E '[^ ]+ +5 .*' data.txt > output.txt
$ cat output.txt
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
您只能使用grep
命令獲得答案。 但我強烈建議你使用awk
命令。
這樣做的簡單方法是:
grep '5' MyDataFile
結果:
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
要在新文件中捕獲它:
grep '5' MyDataFile > newfile
注意:這將在MyDataFile中找到5個任意位置。 要限制到第二列,可以使用簡短的腳本來滿足您的需求。 如果您只想將它限制在第二列,那么像下面這樣的快速腳本就可以了。 用法: script number datafile
:
#!/bin/bash
while read -r fruit num stuff || [ -n "$stuff" ]; do
[ "$num" -eq "$1" ] && printf "%s %s %s\n" "$fruit" "$num" "$stuff"
done <"$2"
輸出:
$ ./fruit.sh 5 dat/mydata.dat
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.