web-dev-qa-db-ja.com

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

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

前もって感謝します

2
user1024962

Awk exを使用できます。

awk -F, 'NF==3 {$0=","$0} 1' file

GNU awkの適切な最新バージョンがある場合、それを使用してファイルにインプレースで適用できます

gawk -i inplace -F, 'NF==3 {$0=","$0} 1' file

それ以外の場合は、sedPerlなどの別のツールを使用する方がおそらく簡単です。

Perl -i -F, -pe '$_ = "," . $_ if $#F == 2' file

多分

sed -i'.bak' -e 's/,/,/3;t' -e 's/^/,/' file

(3番目のコンマの置き換えを試み、失敗した場合は行頭のコンマを置き換えます)。

8
steeldriver

私は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 '[^,]+,[^,]+,[^,]+,[^,]+$'

データフィールド内にコンマがありますか?その後、乱雑になります。

1
Joshua