awkはcsvファイルからフィールドを抽出できません。

awkはcsvファイルからフィールドを抽出できません。

愚かな質問かもしれませんが、私は初心者です。現在、csvファイルからフィールドを抽出するのに問題があります。理想的には、liタグと括弧内の3番目の列を使用して印刷したいと思います。私が得た最も近いもの

awk -F'\t' '{print "\"<li>$2($3)</li>\""}' OFS='","' datafile.csv

"<li>$2($3)</li>"これにより、データを抽出せずに重複のみが発生します。

のみを使用すると、awk -F'\t' '{print "\<li>$2,($3)</li>\"}' OFS='","' datafile.csv終了していない文字列エラーが発生します。

私が使用している場合:

awk '{print $1","$2","$4}' datafile.csv

スペースの代わりにカンマでほぼすべてを印刷します。

私が使用している場合:

awk '{print $2","$3"}' datafile.csv

私は得る:

awk: non-terminated string ,}... at source line 1
 context is
    {print >>>  $2","$3"} 

何が問題なのかよく分からない。を試してみましたcut

ベストアンサー1

TSVファイル内のタブ区切りの2番目と3番目のフィールドの<li>$2($3)</li>場所$2と場所を印刷したいようです。$3

さまざまな方法でこれを行うことができますが、最も明白な2つの方法は次のとおりです。

print "<li>" $2 "(" $3 ")</li>"

または

printf "<li>%s(%s)</li>\n", $2, $3

両方のバリアントには引用符$2またはを含めません$3。そうすると、参照する文字列ではなく$2リテラル文字列が出力されます。$3これが最初のコード部分の問題ですawk。他の人は、不均衡な見積もりの​​ために困難を経験します。

文字列の周囲に二重引用符を入れるには、次のようにします。

print "\"<li>" $2 "(" $3 ")</li>\""

または

printf "\"<li>%s(%s)</li>\"\n", $2, $3

おすすめ記事