簡體   English   中英

grep:保留某些列中具有特定字符串的行

[英]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'

訪問標簽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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM