我想总结一下CSV文件的第二列。
我使用了以下代码:
awk -F'#' '{c+=$2}END{printf "count=%d\n",c}' file.csv
完美无缺。
现在我想添加ifelse
条件。
我想仅在第3栏=' A'第4栏=' B'
我添加了ifelse
条款,但它不起作用
awk -F'#' 'if [ "$3" == 'A' && "$4" == 'B' ]; then c+=$2; fi
END{printf "count=%d\n",c}' file.csv
答案 0 :(得分:4)
您正在将Awk
和bash
的构造混合在一起。假设您需要if-else
中的Awk
条款,
awk -F'#' '$3 == "A" && $4 == "B"{c+=$2;} END{printf "count=%d\n",c}' file.csv
count=41
我生成的样本输入
$ cat file.csv
junk#21#A#B
junk#22#C#D
junk#20#A#B
junk#19#D#E
即。仅当'$3 == "A" && $4 == "B"
等于$3
且A
等于$4
B
才会隐含地表示执行和计算操作
if
的明确用法可以在下面进行,
awk -F'#' '{if ($3 == "A" && $4 == "B") {c+=$2;}} END{printf "count=%d\n",c}' file
count=41
NOT 建议使用纯bash
脚本来解析/循环文件,但仅仅为了练习,如果你想要一种方法,你可以做类似的事情
#!/bin/bash
unset count
# The '_' in read implies ignore rest of the line
while IFS='#' read -r col1 col2 col3 col4 _
do
[[ "$col3" == "A" && "$col4" == "B" ]] && ((count+=col2))
# Here the '[[' implies the if-clause and '&&' implies do on true condition
done<file
printf "%d\n" "$count"