awkコマンドがあります。変数を使用する必要がi
ありますが、これを行うとコマンドは機能しません。
"fechaName": "1", "firstName": "gdrgo", "xxxxx": "John", "xxxxx": "John", "xxxxx": "John", "xxxxx": "John", "xxxxx "":"ジョン","姓":"222",dfg "fechaName": "2", "xxxxx": "John", "Name": "Beto", "xxxxx": "John", "xxxxx": "John", "xxxxx": "John", "最後名前" ": "111", "xxxxx": "ジョン", "fechaName": "4", "xxxxx": "John", "Name": "Beto", "xxxxx": "John", "xxxxx": "John", "xxxxx": "John", "最後名前" ": "111", "xxxxx": "ジョン", "fechaName": "4", "xxxxx": "John", "xxxxx": "John", "FirstName": "beto2", "xxxxx": "John", "Lastname": "555", "xxxxx " ": "ゾーン", "xxxxx": "ゾーン", "fechaName": "5", "xxxxx": "John", "xxxxx": "John", "FirstName": "beto2", "xxxxx": "John", "Lastname": "444", "xxxxx " ": "ゾーン", "xxxxx": "ゾーン", "fechaName": "4", "firstName": "gdrgo", "xxxxx": "John", "xxxxx": "John", "xxxxx": "John", "xxxxx": "John", "xxxxx "":"ジョン","姓":"222",dfg "fechaName": "7", "xxxxx": "John", "xxxxx": "John", "名前": "beto2", "xxxxx": "John", "姓": "444", "xxxxx " ": "ゾーン", "xxxxx": "ゾーン",
代わりに5を使用すると「私」効果がある
awk -v OFS='"' -v FS='Name": "' '{ for( i=2; i<=7; i++ ) if( match($2, /5"/) ) print $0 }' sumacomando
これは私の命令です。
awk -v OFS='"' -v FS='Name": "' '{ for( i=2; i<=7; i++ ) if( match($2, /**i**"/) ) print $0 }' sumacomando
awk -v OFS='"' -v FS='Name": "' '{ for( i=2; i<=7; i++ ) if( match($2, /i"/) ) print $0 }' sumacomando
ベストアンサー1
一度にすべてのレコードを並べ替えることはできません。
文字通り主な質問に答えてフィールドを変数と一致させるためにこれを行う必要はありませんmatch($2,i)
(/.../
または後にmatch($2, i "\"")
.が続き、通常の文字列連結構文を使用します)。i
"
これにより、「4」を含むレコードに対して正しい結果が得られます。
awk '{i=4}$0 ~ "\"" i "\""' file1 #(string concatenation yelds to "4")
ただし、この方法はうまく機能しますが、期待どおりにデータを自動的に並べ替えることはありません。
awk '{for (i=1;i<8;i++) if ($0 ~ "\"" i "\"") print}' file1
すべての履歴を並べ替えるには、まずすべての履歴をメモリにロードしてから、並べ替えられた順序で印刷する必要があります。
サンプルファイルに適用される他のアプローチは次のとおりです。
awk -F"[\"]" '{a[$4]?a[$4]=a[$4] ORS $0:a[$4]=$0;last=NR}END{for (i=1;i<=last;i++) if (a[i]) print a[i]}' file1
"
最初の行の区切り文字テキストを使用すると、4つの部分に分割され "fechaName": "1",....
(1
フィールド$ 4)、整数として直接使用できます。
この部分はa[$4]?a[$4]=a[$4] ORS $0:a[$4]=$0
if-then-elseにすぎません。
a[$4]
(==>最初の行の場合)すでに値がある場合は、a[1]
出力レコード区切り文字(ORS)を使用してa [$ 4]の前の内容にこの行を追加します。これは新しい行(または短い「\ n」) - それ以外の場合は$ 0をa [$ 4]に適用します。
最後に、最後の部分はこの配列aを印刷します。
ここでは、この操作では、ソートがawkよりはるかに高速であると言う必要があります。
LC_ALL=C sort -t"\"" -k3 file1