我有從多個字段,包括布爾(由postgresql導出爲t
和f
字符)postgresql表導出,我需要將它導入另一個數據庫(monetdb )不會將t/f理解爲bool值。使用awk或其他替換文件中的整個字段值
(編輯刪除空間,以反映真實文件方面,避免憤怒的評論 - 以前有位顯示)
id|val_str|bool_1|bool2|bool_3|bool4|
1|help|t|t|f|t|
2|test|f|t|f|f|
...
正如我不能代替t
/f
,我需要到外地分離器整合所有occurence在我的模式。 我試圖使用awk
與FALSE
與TRUE
和f
替換字段t
:
awk -F'|' '{gsub(/\|t\|/, "|TRUE|"); gsub(/\|f\|/, "|FALSE|"); print;}'
這是工作部分,如用相同的值(|t|t|
)連續的場將具有僅第一發生替換(|TRUE|t|
- 如第二次事件實際上是t|
而不是|t|
)。
id|val_str|bool_1|bool2|bool_3|bool4|
1|help|TRUE|t|FALSE|TRUE|
2|test|FALSE|TRUE|FALSE|f|
...
表有〜450列,所以我真的不能指定列的列表將被替換,也不能在Postgres的工作,以「改造」布爾列(我可以,但...)。
我可以運行gsub()
兩次,但我正在尋找更優雅的方式來匹配所有字段的整個字段內容。
gsub(/^t$/, ...)
既沒有幫助,也沒有幫助,因爲我們處於大部分時間的中間位置。
你考慮的可能性,使postgresql輸出所需的格式?我會期待一個標誌或一些其他參數使它容易,它看起來像[沒有這樣的事情,但它仍然有可能](https://stackoverflow.com/questions/28959507/output-yes-no-instead-of- TF換布爾數據型在-的PostgreSQL)。 – Aaron
'[原始文件沒有空格]是什麼意思?如果您發佈的樣本輸入與您的真實數據格式不同,那麼很顯然,請解決這個問題,否則您將得到比所需更復雜的解決方案,或者只是不起作用,任何一種方式都會浪費人們的時間。如果這只是一個完全不相關的陳述,那就擺脫它。 –
我認爲這會更容易閱讀。 – ant1j