我有以下数据,可能分布在多个输入文件中:
colB1:colB2:colB3:$130.00:...
colC1:colC2:colC3:$83.00:...
colD1:colD2:colD3:$80.00:...
我的目标是将输入的每一行的前两列写入到输出文件中,该文件的名称包含以$ 10开头的数字。
因此,对于上面的输入,我将有两个输出文件,一个包含两行,另一个具有一个:
balance-80.out
===
colC1:colC2
colD1:colD2
balance-130.out
===
colB1:colB2
我当前的尝试如下所示:
#!/bin/bash
for ((value_1=90; value_1<200; value_1+=10)); do
awk -F: \
-v var=$value_1 \
-v var1=$((value_1+10)) \
'{ sub(/\$/, "", $4) }
($4+0) >= var && ($4+0) < var1 { print $1":"$2 }' \
*.txt > balance_$value_1.txt
done
这行得通,但是显然很笨拙。如何一次完成?
几点:
awk
-高质量的awk
实现将自动缓存文件描述符,从而使输出文件在各行之间保持打开状态(类似的Shell脚本不会这样做)因此:
awk -F: -v min=80 -v max=200 '
{ sub(/\$/, "", $4); val = (0 + $4) }
val >= min && val < max {
print $1 ":" $2 >("balance-" (val - (val % 10)) ".out")
}
' *.txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句