次の内容を含むデモ.txtというファイルがあります。
value -= [
"02|05|06|abc",
]
/* Some other content other than value variable */
value -= [
]
value -= [
"0698|06|07|abc",
]
このデモ.txtファイルには多くの値変数があります。
Demo.txtファイルを読んだ後、以下のように一意の値だけを印刷したいと思います。
02| 05| 06| 0698| 07| abc
私は以下を試しました:
awk '$0 == "value -= [" {i=1;next};i && i++ <= 1'
これは私に与える
"02|05|06|abc",
]
"0698|06|07|abc",
しかし、私は「]」を望んでおらず、重複した内容も望んでいません。この場合、「06」と「abc」
誰でもアドバイスできますか?
答え1
$ grep -oE '".*"' demo.txt | grep -oE '\w+' | sort -u
02
05
06
0698
07
abc
-o
一致する行のうち、一致する(空でない)部分のみを印刷します。各部分は別々の出力行に印刷されます。-E
PATTERNを拡張正規表現として解釈".*"
引用符内のすべての値を取得します。\w+
1つ以上の英数字/下線文字sort -u
独自の価値を得る
答え2
以下は、以下を使用するソリューションです。awk -v RS='' -F='"' -f script input_file
/value -= \[/ {
split($0, data);
count = split(data[2], values, "|");
for (i = 1; i <= count; i++) {
result[values[i]] = values[i];
}
}
END {
for (r in result) {
printf r "|";
}
print "";
}
これは次の方法で行うこともできますsed
。
sed -nr '/"/{s/[ "]//g;s/,/|/;G;s/\n//;x};${x; :a; s/([^|]+\|)(.*)\1/\2/; ta; p}' input