Shell脚本,如果语句变量比较存在问题

时间:2018-10-02 16:19:34

标签: shell csv for-loop if-statement

我有以下shell脚本,可将标题行附加到一批.csv文件中。我需要根据输入csv中的列数将不同的标头txt文件应用于每个.csv。该脚本正在工作,因为它正在应用头文件并输出新的csv,但是每个文件都在获取“ else”头,包括使用csvgrep -n $f | wc -l命令计算为“ 91”的csv。

#!/bin/sh

dir="/Users/XXX/xlsxtocsv"

#move to the csvraw output directory
cd csvraw/

#append the header row needed for DB import
for f in *.csv; do 
    if [[ "csvgrep -n $f | wc -l" == 91 ]]; then
       cat $dir/svcheader3col.txt $f >> "$dir/csvhead/${f%}header.csv"
    else
       cat $dir/svcheader.txt $f >> "$dir/csvhead/${f%}header.csv"
    fi

done

当我在csv文件上手动运行csvgrep命令时,我得到:

username:csvraw username$ csvgrep -n file4col.csv | wc -l
      92
username:csvraw username$ csvgrep -n file3col.csv | wc -l
      91

为什么iffile语句中的“ file3col.csv”文件的评估结果不为91,而是我手动运行该文件时的结果?

1 个答案:

答案 0 :(得分:1)

您实际上并没有运行csvgrep命令。使用命令替换,例如$(...)

#!/bin/bash
: "${dir?dir must be defined}"
for f in *.csv; do 
    if [[ "$(csvgrep -n "$f" | wc -l | tr -d '[:space:]')" = 91 ]]; then
       cat -- "$dir/svcheader3col.txt" "$f" 
    else
       cat -- "$dir/svcheader.txt" "$f"
    fi >> "$dir/csvhead/${f%.csv}header.csv"
done