![处理文件以创建新文件](https://linux22.com/image/58315/%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E4%BB%A5%E5%88%9B%E5%BB%BA%E6%96%B0%E6%96%87%E4%BB%B6.png)
我有一个 file1,其中包含逗号分隔值(军事时间格式的超时/超时,例如 0800、0900、1300)。文件 1 的每一行都包含每天的 timein/timeout。
样本文件1:
Name, Position Level 3
0800, 1800
0900, 1200, 1230, 2000
0901, 2100
文件 2 包含(每小时费率):
Position Level 1, 100
Position Level 2, 200
Position Level 3, 300
Position Level 4, 400
Position Level 5, 500
我需要创建一个文件 3,其中包含几行,其中每行显示第一次进入和最后一次超时以及每天渲染的小时数。最后一行将显示月薪,该月薪将计算当月渲染的小时数(每天的小时数总和)* 小时费率。
文件3:
Name, Position Level 3
0800, 1800, 10
0900, 2000, 10.5
0901, 2100, 10.983
9444.9
答案1
请注意,您提供的文件不是用逗号分隔的;它们以逗号空格分隔。您需要去掉逗号后的这些空格,否则下面的方法可能无法正常工作。
以下是伪代码,可以帮助您入门。
注意使用正确的字符。
我的方法是:
- 读取并存储file1的第一行
FIRSTLINE="`head -n 1 file1`"
- 将其写入文件3
回声“$FIRSTLINE”>>文件3
- 读取 file1 的第一行并获取以逗号作为分隔符的第二个参数
POSLVL="`head -n 1 file1 | awk -F , '{print $2}'`"
现在,您在变量中拥有了位置级别,这使您可以通过在 file2 中查找来计算出此代码的每小时费率:
RATE=`grep "$POSLVL" file2 | RATE=`grep "$POSLVL" file2 | awk -F , '{print $2}'`
然后我们可以使用如下内容继续读取 file1 的每一行:
MAXLINES=`wc -l 文件 1 | awk '{print $1}'` 线=2 同时测试 $LINE -le $MAXLINES 做 READLINE="`头 -n $LINE | 尾 -n 1`" LINE_HOURS=0 总成本=0 # 计算逗号的数量以确定输入/输出对的数量 逗号=`回显$READLINE | grep -o , |厕所-l | awk '{print $1}'` # 如果逗号计数 = 1(1 个输入/输出对) # 提取第一个和第二个数字 # 将这些数字写入 file3,不带换行符 (echo -n "$NR1,$NR2") # 计算出小时差 # 添加到 LINE_HOURS # 如果逗号计数 > 2(2 个输入/输出对) # 提取第三个和第四个数字 # 将这些数字写入 file3,不带换行符 # 计算出小时差 # 添加到 LINE_HOURS # 如果最多 3、4 或 5 对,则可以添加更多.. # -- 到达行尾 -- # 将 LINE_HOURS 写入 file3 # 通过乘以 LINE_HOURS * RATE 计算总费用并存储在 TOTAL_COST 中 线=$((线+1)) 完毕 # -- 到达文件末尾 -- # 将 TOTAL_COST 写入 file3
看你怎么走。