2

本当に基本的な質問でごめんなさい。タブ区切りファイルの特定の列を「xyz」などの文字列に置き換えるにはどうすればよいですか?

例えば

入力:

abc\t  def\t   \t   xyz
pqr\t  ert\t   \t   yut 

出力:

abc\t  def\t   new_str\t   xyz
pqr\t  ert\t   new_str\t   yut

つまり、ファイルの3番目の列が空であり、文字列に置き換えたいのです。

私はこのようなものを結びました:

awk '{$3="new_str"}1' test1.csv > test1_op.csv

しかし、それはタブを維持していないように見えます。また、ファイルには400列あるため、awkコマンドを次のように記述します。

awk -F, '{OFS=",";print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,...,$400}' in.csv > outfile.csv

避けたいです。

ありがとう。

4

3 に答える 3

5

awkタブで区切られているため、空白(スペース、タブ、および場合によっては他のより難解なタイプの任意の組み合わせ)で分割するデフォルトではなく、タブで分割することで正しい方向に進みます。それが済んだら、変更したい列に直接割り当てて、$0をもう一度印刷することができます。

awk -F$'\t' 'BEGIN {OFS="\t"} {$3="new_str"; print}' in.csv > outfile.csv

awk入力ファイルリストに表示される変数の割り当ても処理できるため、見た目が少しすっきりします。

awk '{$3="new_str"; print}' FS=$'\t' OFS=$'\t' in.csv > outfile.csv
于 2012-08-02T19:46:02.057 に答える
2

これはあなたのために働くかもしれません(GUN sed):

sed -i 's/\t/new_str&/3' file
于 2012-08-02T19:46:23.330 に答える
1

空白をどのように処理するかは明確ではありませんが、おそらく次のようにします。

awk '{$3="new_str"}1' FS=\\t OFS=\\t

これにより、元々。にあった空白が破棄されることに注意してください$3。あなたはどちらかでそれを保つことができます:

awk '{$3=$3"new_str"}1' FS=\\t OFS=\\t

また

awk '{$3="   new_str"}1' FS=\\t OFS=\\t

あなたのニーズに応じて。

于 2012-08-02T19:28:03.810 に答える