使用if语句从shell脚本中删除文件的第一行

时间:2016-10-28 12:50:22

标签: shell

有些数据文件在第一行导入了标题名称而其他数据文件没有标题。那些带有标题的人总是"公司"作为第一行的第一个字段。为了将它们加载到DB中,我需要摆脱第一行。所以我需要编写.sh scrict,它只删除第一列第一行="公司"的那些文件的第一行。我想我需要将awk与if语句结合使用,但我不确切知道如何。

3 个答案:

答案 0 :(得分:1)

if  head -n 1 input.csv | cut -f 1 -d ',' | grep company
    then tail -n +2 input.csv > output.csv
else
    cp input.csv output.csv
fi

答案 1 :(得分:1)

如果您确定字符串“company”仅显示为标题上的第1个字段,则可以采用这种方式

sed -e /^company,/d  oldfile > newfile

假设分隔符是逗号。

另一种解决方案:

if [ head -1 oldfile | grep -q "^company,"] ; then
   sed -e 1d oldfile > newfile
else
   cp oldfile newfile
fi

答案 2 :(得分:1)

不需要if。按照您的要求直接做到:

打印第一行,除非它以company开头:

strip_header_if_present() {
    IFS='' read -r first_line
    echo "$first_line" | grep -v ^company,

现在打印剩余的行:

    cat
}

使用此shell函数:

strip_header_if_present < input.csv > output.csv