簡體   English   中英

如何使用cut / awk / sed命令從Linux中的文件中選擇作為記錄

[英]How use cut/awk/sed command to select as records from a file in linux

我有一個文件(details.txt),其內容格式如下。

Serial Number: 0xf
Name: XXX
Age: 25
Sex: Male
Serial Number: 0xe
Name: YYY
Age: 27
Sex: FeMale

我想檢索姓名為“ XXX”的人的完整記錄

如何使用cut命令來實現?

您可以像這樣簡單地使用grep:

grep -B1 -A2 "Name: XXX"

-B1和-A2表示grep還應該在匹配之前打印一行,在匹配之后打印兩行。

$ cat tst.awk
BEGIN{ FS=": *"; OFS=": "; split(tgt,a); tgtTag=a[1]; tgtVal=a[2] }
{ tags[++numTags] = $1; tag2val[$1] = $2 }
numTags == 4 {
    if (tag2val[tgtTag] == tgtVal) {
        for (tagNr=1; tagNr<=numTags; tagNr++) {
            tag = tags[tagNr]
            print tag, tag2val[tag]
        }
    }
    numTags = 0
}

$ awk -v tgt="Name:XXX" -f tst.awk file
Serial Number: 0xf
Name: XXX
Age: 25
Sex: Male

$ awk -v tgt="Age:25" -f tst.awk file
Serial Number: 0xf
Name: XXX
Age: 25
Sex: Male

$ awk -v tgt="Age:27" -f tst.awk file
Serial Number: 0xe
Name: YYY
Age: 27
Sex: FeMale

$ awk -v tgt="Sex:FeMale" -f tst.awk file
Serial Number: 0xe
Name: YYY
Age: 27
Sex: FeMale

使用sed:

sed -n '$!N;/Name: XXX/{N;N;p;}' filename

paste將允許您將記錄的所有字段放在同一行上(只要您的整個文件由每4行組成的記錄組成)。

# this will give the age of XXX
paste - - - - < details.txt | grep 'Name: XXX' | cut -f 3 | cut -f 2 -d:
awk '/^Name: XXX/,/^Serial Number:/ { print }' FILE

將打印/^Name: XX//^Serial Number:/之間的所有內容,包括

您的FILE的輸出:

Name: XXX
Age: 25
Sex: Male
Serial Number: 0xe

使用cut絕對不能做到這一點,您可能需要考慮使用perlrubypython這樣的語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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