- 论坛徽章:
- 0
|
本帖最后由 inanin 于 2022-10-21 23:57 编辑
附件中有文件T0665465_xx-32.txt每一行都是独立的不存在重复行,
文件的内容如下:
/storage-28-158/FDSF/x-T0665465-21173890
/storage-28-158/FDSF/x-T0665465-21173891
/storage-28-158/FDSF/x-T0665465-21173895
文件t1.txt内容如下:
192.168.28.170 451.1 5
192.168.28.172 451.1 5
192.168.28.174 451.1 5
192.168.28.134 305.6 0
192.168.28.140 320.2 5
192.168.28.173 394.7 4
文件ts.sh为一个模板文件,内容大概如下:
#! /bin/bash
sfds=dfdsfa
sdfd=/sfds/fdsfdsf
fdsfads_cSDSe=/stDSd/
fdsaf=/dsfsaf/AAA.txt
sbw=DSFSAFM
teSmDDSpFDFSAFfifo=$$.fiFDSDSAfo
trap "exSDec 10>&-;exec 10<&-;exit 0" 2
mDSkfifo $tempfDFSAifo
exeDSSDc 10<>$tempDFSFfifo
SDFSAAS
{
sDSFAF
sDSFAS
DSFDSF
} &
需求如下:
1、根据t1.txt的第二列和第三列计算得到第四列,生成t2.txt,内容如下:
192.168.28.170 451.1 5 14243
192.168.28.172 451.1 5 14243
192.168.28.174 451.1 5 14243
192.168.28.134 305.6 0 6040
192.168.28.140 320.2 5 10063
192.168.28.173 394.7 4 12474
t2.txt第四列计算规则如下:
170、172、174、140、173的行其第四列的计算方法相同,如下:
14243=451.1*1024*1024/(32*1024+74)-5*1024*1024/(32*1024+74)
134的行即第三列标为0的行其第四列计算方法,如下:
6040=71306-14243-14243-14243-10063-12474
备注:t1.txt文件中第三列被标记为0的只有一行,32从T0665465_xx-32.txt文件名中截取
如果是32则+74,如果为64则+174, t2.txt第四列的计算结果取整(t1.txt标为0的行除外)
71306为T0665465_xx-32.txt的行数
2、根据t2.txt的第一列和第四列拆分T0665465_xx-32.txt文件如下:
28-170_14243.txt
28-172_14243.txt
28-174_14243.txt
28-134_6040.txt
28-140_10063.txt
28-173_12474.txt
备注:28-170和14243组成28-170_14243.txt文件名,14243为拆分的行数,无需关注文本行的内容。
拆分前使用t1.txt的IP前缀(只有一种IP前缀)将T0665465_xx-32.txt文件转换为以下格式:
192.168.28.158/x-T0665465-21173890
192.168.28.158/x-T0665465-21173891
192.168.28.158/x-T0665465-21173895
3、使用ts.sh的内容和t2.txt的第一列和第四列作为文件名生成以下文件:
28-170_14243.sh
28-172_14243.sh
28-174_14243.sh
28-134_6040.sh
28-140_10063.sh
28-173_12474.sh
备注:根据模板文件ts.sh生成的每个.sh的文件都将AAA.txt替换成对应的文件名:
28-170_14243.sh 替换AAA.txt为28-170_14243.txt
28-172_14243.sh 替换AAA.txt为28-172_14243.txt
4、截取文件T0665465_xx-32.txt中T0665465创建目录,将2、和3、生成的文件都放在T0665465目录中
执行方式为./1.awk -v a=665465,通过变量a找到相应的文件,找不到给个提示并退出执行。
|
|