2

ユーザー入力の記録を保持するログ ファイルがあります。ログの各行は一意であるため、userId と URL の 2 つの特定の項目を取り出す必要があります。awk < file '{print$1, print$6}'アイテムが各行の同じ位置にあるとは限らないので、私はただ使うことはできません.

テキスト例:

userId='1' managed:no address:123street phone:1234567890 http:/someurl.com
newuser:yes userId='2' managed:yes address:123street  http:/someurl.com
userId='3' address:123 street phone:1234567890 http:/someurl.com
userId='4' managed:no address:123street phone:1234567890 http:/someurl.com

userId と URL アドレスをファイルに解析する必要がありますが、これらは各行の同じ位置にあるとは限りません。どんな提案でも大歓迎です。

4

3 に答える 3

2
$ awk '{for(i=1;$i!~/userId/;i++); print $i, $NF}' file
userId='1' http:/someurl.com
userId='2' http:/someurl.com
userId='3' http:/someurl.com
userId='4' http:/someurl.com
于 2013-08-15T16:54:04.507 に答える
1

コードを試してください:

gawk '{
    for (i=1; i<=NF; i++)
        if ($i ~ "^userId=") id=gensub(/userId=\047([0-9]+)\047/, "\\1", "", $i)
        else if ($i ~ "^http") url=$i
        print "In line "NR", the id is "id" and the url is "url
}' file.txt

サンプル入力:

userId='1' managed:no address:123street phone:1234567890 http:/someurl1.com
newuser:yes userId='2' managed:yes address:123street  http:/someurl2.com
userId='3' address:123 street phone:1234567890 http:/someurl3.com
userId='4' managed:no address:123street phone:1234567890 http:/someurl4.com

サンプル出力:

In line 1, the id is 1 and the url is http:/someurl1.com
In line 2, the id is 2 and the url is http:/someurl2.com
In line 3, the id is 3 and the url is http:/someurl3.com
In line 4, the id is 4 and the url is http:/someurl4.com

このソリューションには、id または http アイテムを行のどこにでも配置できるという利点があります。

于 2013-08-14T20:49:03.863 に答える
0

awk:

awk '{for(c=1;c<NF;c++){if(match($c,/userId/)){print $c,$NF; break}}}' your.file

出力:

userId='1' http:/someurl.com
userId='2' http:/someurl.com
userId='3' http:/someurl.com
userId='4' http:/someurl.com
于 2013-08-14T20:49:04.537 に答える