2017-02-22 10 views
1

何百もの列から列を削除して既存のファイル名に保存する方法を知っていますか?そして、私はそれをいくつかのファイルに対しても行わなければなりません、同時にそれを一緒にすることは可能でしょうか?私は見て、それをしようとしているが、それはそれと運がないようです。 お手数をおかけしていただきありがとうございます。区切られたファイルから列を削除して既存のファイル名に保存する

awk -F, '{for(i=1;i<=NF;i++)if(i!=x)f=f?f FS $i:$i;print f;f=""}' x=2 file > file1 

これは正しいですか?

答えて

2

awkコードがよさそうです。あなたは物事をスピードアップしたい場合は、cutはあなたの親友ことがあります

1,2,3,4,5,6 

time awk -F, '{for(i=1;i<=NF;i++)if(i!=x)f=f?f FS $i:$i;print f;f=""}' x=2 t >/dev/null 

real 0m13.815s 
user 0m13.116s 
sys 0m0.217s 

time cut -f1,3- -d, t >/dev/null 

real 0m2.374s 
user 0m2.093s 
sys 0m0.054s 
:ここ

# let's say we want to take out column number 2 
for file in *; do 
    newfile="$file.changed" 
    cut -f1,3- -d, "$file" > "$newfile" && mv "$newfile" "$file" 
done 

は、このような240万本の同一ラインでのファイルのawkcut比較であります


私が使用しているルールはこれです - awkcut、でできないもの、pasteなどであり、関連するファイルは小さい。パフォーマンスが重要な場合や複雑なロジックがある場合は、Perl、Python、Rubyなどのより優れた言語を選択して、わかりやすいコードを書くことができます。

+0

私は試しましたがうまくいきません。 2番目の列を削除して、-1,3-右に変更しましたか?ありがとう –

+0

2列目は、 '1,3-' – codeforester

+0

は正常に動作しましたが、2列目はまだそこにあります。私は何かを残しましたか? –

関連する問題