python - 从文件中索引值

标签 python bash csv perl awk

我正拼命地尝试完成一项工作任务,但我就是想不通。

简短说明:我必须监视一个文件,它会产生一些值。我设法将这些值隔离到一个单独的文件中,并且我正在为每个值分配一个索引。

描述:

我给定的文件(文件 A)如下所示,但包含超过 10000 个条目:

402
506
223
123
5667
17430
9921
9232

里面的所有值基本上都是整数,范围在 103 到 17431 之间。对于文件 A 中的每个单独的数字,我必须分配一个从 0 到 9 的索引值。 我的第一种方法是使用 sed 以便用其特定索引的给定值从文件 A 中逐字替换每个字符串,但是对于我的大文件来说花费的时间太长了。 向我推荐的另一种方法是使用 awk 但我也失败了。我的脚本看起来像这样:

awk '($0>=363 && $0<=499) || ($0>=4645 && $0<=4646) {$0="0"}1' tmp >tmp2

awk '($0>=2174 && $0<=2193)  {$0="1"}1' tmp >tmp2

awk '($0==500) || ($0>=12308 && $0<=12356) {$0="2"}1' tmp >tmp2

awk '($0>=103 && $0<=220) || ($0>=252 && $0<=299) || ($0>=1980 && $0<=1986) || ($0>=2921 && $0<=2922) {$0="3"}1' tmp >priority

awk '($0>=221 && $0<=251) || ($0>=8085 && $0<=8091) || ($0==8350) || ($0>=12809 && $0<=12945) || ($0>=16834 && $0<=17033)  {$0="4"}1' tmp >tmp2

awk '($0>=300 && $0<=362) || ($0=522) || ($0>=2923 && $0<=2925) || ($0>=3441 && $0<=3442) || ($0=4644)|| ($0>=5677 && $0<=5695) || ($0>=8082 && $0<=8083)|| ($0>=8093 && $0<=8349) || ($0>=12946 && $0<=12947) || ($0>=21986 && $0<=13215) || ($0>=13309 && $0<=13311)  {$0="5"}1' tmp >tmp2

我希望得到这样的输出:

5
3
3
2
1
6
7
7

没有发生。我声明了每个索引的范围,并尝试相应地替换每个值,但没有用。我正在尝试采用for 循环if/else方法,但我不知道怎么做,因为我是新手。 如果有人可以用一些对我有帮助的语法来帮助我? 我试图写一些类似的东西:

x=value from file list.csv
for x in rage1 or range2 or range3 
 replace x with 0
for x in range 3 or range 4 or range 5
 replace x with 1

OR an if/else approach

x=values from list.csv
if x in range1 or range2 or range3 
  then replace x with 0
else if x in range4 range5 range6
  then replace x with 1

有人可以帮我解决这个问题吗?我正在尽我所能(bash、pearl、python...),所以只要稍微解释一下,任何想法都是受欢迎的,正如我所说的,我是新手。谢谢。

最佳答案

awk 脚本有什么问题?这是具有您指定范围的 awk one liner,它按预期工作。

awk '{ if( ($1>=363 && $1<=499) || ($1>=4645 && $1<=4646)){ print 0}  
else if( ($1>=2174 && $1<=2193)) { print 1}  
else if( ($1==500) || ($1>=12308 && $1<=12356)){ print 2} 
else if( ($1>=103 && $1<=220) || ($1>=252 && $1<=299) || ($1>=1980 && $1<=1986) || ($1>=2921 && $1<=2922)){ print 3} 
else if( ($1>=221 && $1<=251) || ($1>=8085 && $1<=8091) || ($1==8350) || ($1>=12809 && $1<=12945) || ($1>=16834 && $1<=17033)){ print 4} 
else if( ($1>=300 && $1<=362) || ($1=522) || ($1>=2923 && $1<=2925) || ($1>=3441 && $1<=3442) || ($1=4644)|| ($1>=5677 && $1<=5695) || ($1>=8082 && $1<=8083)|| ($1>=8093 && $1<=8349) || ($1>=12946 && $1<=12947) || ($1>=21986 && $1<=13215) || ($1>=13309 && $1<=13311)){ print 5}
}' tmp > tmp2

关于python - 从文件中索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57624956/

相关文章:

csv - 打开、编辑并重新保存 CSV 文件

python - 如何在 Python 中获取套接字的外部 IP?

python - 如何在散点图 matplotlib 中缩小图例元素?

arrays - bash shell 数组输出范围到 csv

bash - 如何将同一个 AMI 同时复制到多个区域?

linux - sudo 作为 www-data 文件权限

c# - 如何在 Excel 中使用正确的列打开 CSV 文件

python - 相位相关

python - python中的多维外积

linux - 列出所有用户和他们上次阅读邮件的时间,通过管道传输到多个输出