【问题标题】:In file editing, how to replace all the string words with incremental integers?在文件编辑中,如何将所有字符串单词替换为增量整数?
【发布时间】:2015-11-30 22:27:16
【问题描述】:

我有一个包含很多字符串的文件,被管道切断。我想要一个脚本(用 bash 或任何其他编程语言编写),能够用增量唯一整数(类似于 ID)替换每个单词。

来自这样的输入:

aaa|ccccc|ffffff|iii|j
aaa|ddd|ffffff|iii|j
bb|eeee|hhhhhh|iii|k

我想要这样的东西

1|3|6|8|9
1|4|6|8|9
2|5|7|8|10

即:aaa已被1取代,bb已被2取代,以此类推。

如何做到这一点?谢谢!

【问题讨论】:

    标签: string bash file edit


    【解决方案1】:

    来救援... 这将按行进行编号,我不确定它是否足够重要以使其成为柱状。

    awk -F "|" -vOFS="|" '{
         line=sep="";
         for(i=1;i<=NF;i++) {
            if(!a[$i])a[$i]=++c;
            line=line sep a[$i];
            sep=OFS
         }
         print line
    }' words
    
    1|2|3|4|5
    1|6|3|4|5
    7|8|9|4|10
    

    要将单词关联放入另一个文件,您可以替换

    if(!a[$i])a[$i]=++c;
    

    if(!a[$i]){
         a[$i]=++c; 
         print $i"="a[$i] > "assoc"
    }
    

    【讨论】:

    • 谢谢!这非常有效:-) 附带问题:你知道如何将单词-数字关联列表(aaa=1、bb=2、ccccc=3 等)也保存在另一个文件中吗?
    • 谢谢,但是单词关联文件生成对我不起作用... inputFile="inputfile.txt" outputFile="outputfile.txt" awk -F "|" -vOFS="|" '{ 行=sep=""; for(i=1;i $outputFile } line=line sep a[$i]; sep=OFS } print line }' $inputFile // 怎么了?
    • 这不是在awk 中传递参数的方式。从 outputFile 中删除 $
    【解决方案2】:

    你可以定义一个关联数组

    declare -A array
    

    使用单词作为键,使用递增的数字作为值

    array[aaa]=$n
    

    然后用值替换原来的单词

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2014-04-29
      • 2015-01-03
      • 2012-10-23
      • 2023-03-25
      • 2018-01-05
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多