Linuxフォルダーに以下のようなファイルがあります。ファイルには4つの列があり、値はコンマで区切られている必要があります。 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
前もって感謝します
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番目のコンマの置き換えを試み、失敗した場合は行頭のコンマを置き換えます)。
私はsed
ソリューションを提案します:
sed 's/^\([^,]*,[^,]*,[^,]*\)$/,\1/' file
出力
col1,col2,col3,col4
a1,a2,a3,a4
b1,b2,b3,b4
,c2,c3,c4
d1,d2,d3,d4
これが機能するかどうかわからない、今それをテストするマシンがない。
ただし、常にコンマを追加してから、最後の4つの要素に対してgrepを実行することもできます。
sed -e 's#^#,#' | grep -o -E '[^,]+,[^,]+,[^,]+,[^,]+$'
データフィールド内にコンマがありますか?その後、乱雑になります。