2017-03-28 20 views
-2

私は最近、いくつかの古いスクリプトをデバッグし、このコードを打つ必要がありました。 awkがここで何をしているのか説明してください。はっきり誰でも私に次のUNIXスクリプトを教えてもらえますか?

#!/bin/ksh 
set -x on 
ls -1 ../Rejectfiles/*.csv 2>/dev/null | while read file 
do 
    filename=${file##*/} 
    if [ -f ../Processed/$filename ] 
     then 
     awk '{ if (NR > 1){ print $0;}}' $file >> ../Processed/$filename 
    else 
     cp $file ../Processed/ 
    fi 
done 
+0

ちょっと注意してください:上記のスクリプトは、ファイル名にスペースやその他の特殊文字が含まれていない場合にのみ機能します... – jm666

+0

'tail -n + 2'は' awk'呼び出しより簡単で、 – twalberg

答えて

0

man awk状態:

NR - @Sundeepが@RichardS彼の答えのコメントで述べたように

現在のレコードの序数:

awk '{ if (NR > 1){ print $0;}}' $fileは、ファイルから最初の序数を削除します。入力ファイルがCSVファイルの場合、最初の序数はファイル内の最初の行を意味します。 @リチャードSはCSVファイルで完璧な意味を述べています(CSVの最初の行には、通常、基本となる値の記述が含まれていることが前提です)。

1
awk '{ if (NR > 1){ print $0;}}' $file >> ../Processed/$filename 

../Processed/$filename

man awk | grep -i " NR " 
       NR  current record number in the total input stream. 

から1つのラインのない$fileからのすべての行はまた、あなたが通常sed

sed -n '1!p' $file >> ../Processed/$filename 

SEDを使用することができます書き込みがより高速です。

+0

簡単なsedコマンド(適切に引用されたパラメータ付き): 'sed 1d" $ file ">>" ../Processed/$ filename "' –

関連する問題