各列の後にカンマを追加するには?

各列の後にカンマを追加するには?

Excelで.csvを開くときに各列に独自のタブがあるようにするには、これが必要です。

私のテキストは次のとおりです。

smmsp              Purpose - Service account for Sendmail; Owner - sysadmin; SERVICE ACCOUNT                            n    Account expires : never
samba              Purpose - Service account for Samba; Owner - sysadmin; SERVICE ACCOUNT                               n    Account expires : never
puppet             Purpose - Service account for Puppet; Owner - sysadmin; SERVICE ACCOUNT                              n    Account expires : never

私はこれが必要です:

smmsp,              Purpose - Service account for Sendmail; Owner - sysadmin; SERVICE ACCOUNT,                            n,    Account expires : never,
samba,              Purpose - Service account for Samba; Owner - sysadmin; SERVICE ACCOUNT,                               n,    Account expires : never,
puppet,             Purpose - Service account for Puppet; Owner - sysadmin; SERVICE ACCOUNT,                              n,    Account expires : never,

出力をパイピングしようとしましたが、awk 'gsub(" ", ",", $1)' FS=, OFS=,すべてのスペースがコンマで置き換えられました。

ベストアンサー1

入力ファイルが固定幅形式のようです。 Excelで開いて変更せずに各列の位置を指定できる必要があります。

ただし、入力例のすべてのフィールドには少なくとも2つ以上のスペースが含まれているように見えるため、2つ以上のスペースがあるすべての項目をコンマで置き換えることができます。

sed -r 's/  \+/,/g' input.txt

指示:

  • 上記-rには、GNUのsedで使用できる拡張正規表現()が必要です。
  • テキストフィールドが固定幅フィールドを埋めるのに十分な長さまたはスペースが1つだけ残っている場合、コンマは挿入されません。

固定幅フィールドの末尾にカンマを入れてから、余分なスペースを削除する別の方法があります。この例では、固定幅フィールドの幅は入力の例に基づいています。

sed 's/\(.\{19\}\)\(.\{101\}\)\(.\{5\}\)/\1,\2,\3,/' columns.txt | sed 's/ *,/,/g'

後者のアプローチは正規表現を拡張する必要はなく、アイテムが完全な固定幅フィールドを満たす場合にも機能します。

おすすめ記事