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