我有以下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,而是我手动运行该文件时的结果?
答案 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