以下のようにlinuxフォルダにファイルがあります。ファイルには、値がカンマで区切られた4つの列が必要です。ただし、一部の行には3つの列しかありません。列が3つある場合は、行の先頭にスペースを追加したいと思います。
入力する:
col1,col2,col3,col4
a1,a2,a3,a4
b1,b2,b3,b4
c2,c3,c4
d1,d2,d3,d4
出力:
col1,col2,col3,col4
a1,a2,a3,a4
b1,b2,b3,b4
,c2,c3,c4
d1,d2,d3,d4
事前にありがとう
答え1
awk exを使用できます。
awk -F, 'NF==3 {$0=","$0} 1' file
適切な最新バージョンのGNU awkがある場合は、次のようにファイルにそのバージョンを適用できます。
gawk -i inplace -F, 'NF==3 {$0=","$0} 1' file
そうしないと、他のツールを使用する方が簡単になる可能性がsed
ありますperl
。
perl -i -F, -pe '$_ = "," . $_ if $#F == 2' file
おそらく
sed -i'.bak' -e 's/,/,/3;t' -e 's/^/,/' file
(3番目のコンマを置き換えます。失敗した場合は、行の先頭のコンマを置き換えます)。
答え2
私はsed
解決を提供します:
sed 's/^\([^,]*,[^,]*,[^,]*\)$/,\1/' file
出力
col1,col2,col3,col4
a1,a2,a3,a4
b1,b2,b3,b4
,c2,c3,c4
d1,d2,d3,d4
答え3
これがうまくいくかどうかはわかりません。まだテストするマシンはありません。
ただし、いつでもカンマを追加してからgrepを使用して、最後の4つの要素を見つけることができます。
sed -e 's#^#,#' | grep -o -E '[^,]+,[^,]+,[^,]+,[^,]+$'
データフィールドにカンマがありますか?すると混乱します。