我最近不得不调试一些旧脚本并对此代码进行了调查。请解释一下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
答案 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中的第一行通常包含基础值的描述)。