2017-03-28 76 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文件,第一個序號意味着文件的第一行。正如@RichardS所提到的,在CSV文件中非常有意義(因爲CSV中的第一行通常包含對基礎值的描述)。

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

寫信$file../Processed/$filename

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

所有線路沒有1線你也可以使用SED

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

通常sed更快速。

+0

簡單的sed命令(帶有正確引用的參數):'sed 1d「$ file」>>「../ Processed/$ filename」 –

相關問題