長さが4未満の場合は、Linuxのファイル行の先頭に列を追加します。

長さが4未満の場合は、Linuxのファイル行の先頭に列を追加します。

以下のように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 '[^,]+,[^,]+,[^,]+,[^,]+$'

データフィールドにカンマがありますか?すると混乱します。

関連情報