次の形式のファイルがあります。
INTEGER INTEGER TEXT
テキストはUnicodeであり、スペースを含めることができます。
printfを使用してファイルの最初のINTEGERとTEXTを特定の形式で印刷するためにawkを使用しようとしています。
問題:一部の行のTEXTにスペースがあるため、$ 3には完全なTEXTがないため、より多くのフィールドで行が破損します。
例:
12 42956 Cinema - 3D/Multiplex
7 12560 Status Update
5 184 Movie
私のアプローチは次のとおりです。
awk '{ c=$3; for(i=4; i< NF;++i){c=c" "$i}; printf "<tag>%d</tag>\n<tag>%s</tag>\n", $1,c}';
しかし、もっと良い方法があると思います。
ベストアンサー1
awk
データが明確に指定されたレコードから来た場合に便利です。このデータは使用できません。ただし、データは「integer stuff the_rest
フォーマット」で、「integer
」または「」stuff
にスペースはありません。これがまさにread
ユーティリティが読みたいものです。読み取るように指定した変数と同じスペースで区切られた単語を読み、行の「残り」を最後の変数に入れます。
bash-4.4$ while read -r integer stuff the_rest; do printf '%d\t"%s"\n' "$integer" "$the_rest"; done <data
12 "Cinema - 3D/Multiplex"
7 "Status Update"
5 "Movie"
すべての末尾のスペースを自動的に削除します。