任何人都可以解释我下面的unix脚本吗?

时间:2017-03-28 08:42:43

标签: bash shell unix ksh

我最近不得不调试一些旧脚本并对此代码进行了调查。请解释一下awk在这里做了什么。

#!/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

2 个答案:

答案 0 :(得分:1)

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

$file中没有1行的所有行写入../Processed/$filename

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

你也可以使用sed

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

通常sed更快。

答案 1 :(得分:0)

man awk明确指出:

  

NR - 当前记录的序号

@Sundeep在@RichardS的评论中指出他的回答:

awk '{ if (NR > 1){ print $0;}}' $file因此从文件中删除第一个序号。如果输入文件是CSV文件,则第一个序号表示文件中的第一行。正如@RichardS提到的那样在CSV文件中非常有意义(假设CSV中的第一行通常包含基础值的描述)。