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