Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 谁能给我解释一下下面的unix脚本吗?_Bash_Shell_Unix_Ksh - Fatal编程技术网

Bash 谁能给我解释一下下面的unix脚本吗?

Bash 谁能给我解释一下下面的unix脚本吗?,bash,shell,unix,ksh,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 &

我最近不得不调试一些旧脚本,并对这些代码进行了修改。请解释一下
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

man awk
明确指出:

NR-当前记录的序号

正如@Sundeep在@RichardS的评论中指出的,他的回答是:

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

$file
中没有一行的所有行写入
。/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
的速度更快。

只需注意:上述脚本仅在文件名不包含空格或其他特殊字符的情况下才能工作…
tail-n+2
awk
调用更简单,对于普通读者来说可能更明显一些,还有…更简单的sed命令(使用正确引用的参数):
sed 1d“$file”>>。/Processed/$filename”
sed -n '1!p' $file >> ../Processed/$filename