2013-01-19 19 views

答えて

12

Cutは、すべての行に同じ数のフィールドがある場合や、そうでない場合はawkを使用するとこれを行うことができます。あなたは--output-区切り出力seperaterの使用を制御したい場合はフィールドの数-4とプリント番目まで

cut -d, -f1-6 # assuming 10 fields 

は、フィールド上の文字列=

awk -F , -v OFS=, '{ for (i=1;i<=NF-4;i++){ printf $i, }; printf "\n"}' 

ループの最初の6つのフィールドを出力しますそれらを出す。

+0

awk行では、printf $ iは$ iを印刷しないと思いますか?おそらくタイプミス? 'print $ i 'がうまくいかない場合は、'; 'をもう一度打ちたいでしょうか? – Kent

+0

@kent yeahはprintf $ iを意味しています。 1つのコマンドだけの場合 – peteches

+0

あなたは正しいですが、あなたは "コンマ"を持っています.. :) – Kent

6

カラムの数が分かっている場合は、cutを使用できます。

cut -d',' -f -5 

はしかし、これは任意のカンマが含まれていない、あなたのCSVファイルのデータを前提としています、あなたのファイルが9列があり、たとえば、コンマはあなたの区切り文字です。 cutは、引用符の中のカンマを区切り文字としても解釈します。

1

awkはワンライナーは:

awk -F, '{for(i=0;++i<=NF-5;)printf $i", ";print $(NF-4)}' file.csv 

カットがある上でのawkを使用することの利点は、あなたが持っているんどのように多くの列をカウントする必要はありませんし、どのように多くの列あなたは維持したいです。あなたが望むのは、最後の4列を削除することです。

はテストを参照してください。

kent$ seq 40|xargs -n10|sed 's/ /, /g'   
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 
11, 12, 13, 14, 15, 16, 17, 18, 19, 20 
21, 22, 23, 24, 25, 26, 27, 28, 29, 30 
31, 32, 33, 34, 35, 36, 37, 38, 39, 40 

kent$ seq 40|xargs -n10|sed 's/ /, /g' |awk -F, '{for(i=0;++i<=NF-5;)printf $i", ";print $(NF-4)}' 
1, 2, 3, 4, 5, 6 
11, 12, 13, 14, 15, 16 
21, 22, 23, 24, 25, 26 
31, 32, 33, 34, 35, 36 
1

これは(GNU SED)あなたのために働くかもしれない:すべての行ならば、それは問題ではありませんので、

sed -r 's/(,[^,]*){4}$//' file 
+0

の値に拡大されています。私の考えでは、これは最良の答えです! –

10
cat data.csv | rev | cut -d, -f-5 | rev 

revは、行を反転させます列の数が同じであれば、最後の4が常に削除されます。これは、最後の4列にコンマが含まれていない場合にのみ機能します。

+2

これは私の意見では本当に素晴らしい解決策です.1回転の使用のために+1です(私はそれが存在するかどうかはわかりませんでした) – skd

1

awk -F, 'OFS=","{for(i=NF; i>=NF-4; --i) {$i=""}}{gsub(",,,,,","",$0);print $0}' temp.txt 
3
awk -F, '{NF-=4; OFS=","; print}' file.csv 

又は代替

awk -F, -vOFS=, '{NF-=4;print}' file.csv 

ハッキングされた方法でこのAWK溶液を各ラインから最後の4つの列を削除します。

+0

余分な列を削除するには良い方法ですが、これは出力の空白と列の間のカンマを置き換えます。それを避け、カンマでそれらを維持する簡単な方法はありますか? –

+0

区切り文字をawk -F、 '{NF- = 4; OFS = "、"; print} ' –

+0

偉大な、それは私のために働く。 'BEGIN'ブロックや' -v'コマンドライン引数で 'awk -F、-vOFS =、...'のように 'OFS'を設定することもできます –

関連する問題