0

この形式を含む行を含むファイルがあります。

fieldA=value1, fieldB=value2, fieldC=value3, fieldD=value4, fieldE=value5

fieldA、fieldB、fieldD に興味があります。ただし、fieldC が存在する場合と存在しない場合があるため、次のようなものは使用できません。

grep "field" * | awk -F"," '{print $1, $2, $4}'

私の最終目標は、次のような出力をすべて 1 行で表示することです。

fieldA=value1, fieldB=value2, fieldD=value4

を使用してみgrep -Eましたが、それらのフィールドが別の行に出力され、フィールド間の関連付けが壊れます。

grep -o -E "field1_=\w*|field2_=\w*|field3_=\w*"
4

2 に答える 2

1

A、B、Dのフィールド名がわかっている場合は、grepとxargsで作業できます。(awk/sedは確かにそれを行うことができました)

grep -Po "fieldA=[^,]*|fieldB=[^,]*|fieldD=[^,]*" file|xargs -n3

それはあなたに与えます:

fieldA=value1 fieldB=value2 fieldD=value4

出力にカンマが必要な場合:

grep -Po "fieldA=[^,]*,|fieldB=[^,]*,|fieldD=[^,]*" file|xargs -n3
于 2013-01-16T00:20:56.423 に答える
0

解決策はsed受け入れられますか?

sed 's/^\([^ ]* [^ ]*\).*\(fieldD=[^,]*\).*/\1 \2/' filename
于 2013-01-16T00:07:43.740 に答える