【问题标题】:divide the rows values of the text files [closed]划分文本文件的行值[关闭]
【发布时间】:2021-03-19 01:56:51
【问题描述】:

我有两个文本文件 file1.txtfile2.txt。这两个文件都包含相同数量的行和列,我想将 file1.txt 的所有行与 file2.txt 分开,我的预期输出如下所示。注意:在输出文件中,字符串 ?-er 模式将被替换为 @ 987654324@.我希望专家能帮助我找到我的输出。提前谢谢。

file1.txt

layer  1     s-er modes          u = -15.0
2.98   2.98   2.98   2.98   2.98   2.98
2.98   2.98   2.98   2.98   2.98   2.98
2.98   2.98   2.98   2.98   2.98   2.98

layer  2     s-er modes          u =   0.0
2.98   2.98   2.98   2.98   2.98   2.98
2.98   2.98   2.98   2.98   2.98   2.98
2.98   2.98   2.98   2.98   2.98   2.98

layer  3     s-er modes          u =   10.0
2.98   2.98   2.98   2.98   2.98   2.98
2.98   2.98   2.98   2.98   2.98   2.98
2.98   2.98   2.98   2.98   2.98   2.98

file2.txt

layer  1     m-er modes          u = -15.0
2.98   2.98   2.98   2.98   2.98   2.98
2.98   2.98   2.98   2.98   2.98   2.98
2.98   2.98   2.98   2.98   2.98   2.98

layer  2     m-er modes          u =   0.0
2.98   2.98   2.98   2.98   2.98   2.98
2.98   2.98   2.98   2.98   2.98   2.98
2.98   2.98   2.98   2.98   2.98   2.98

layer  3     m-er modes          u =  10.0
2.98   2.98   2.98   2.98   2.98   2.98
2.98   2.98   2.98   2.98   2.98   2.98
2.98   2.98   2.98   2.98   2.98   2.98

输出

layer  1     v-er modes          u = -15.0
1.00   1.00   1.00   1.00   1.00   1.00
1.00   1.00   1.00   1.00   1.00   1.00
1.00   1.00   1.00   1.00   1.00   1.00

layer  2     v-er modes          u =   0.0
1.00   1.00   1.00   1.00   1.00   1.00
1.00   1.00   1.00   1.00   1.00   1.00
1.00   1.00   1.00   1.00   1.00   1.00

layer  3     v-er modes          u =   10.0
1.00   1.00   1.00   1.00   1.00   1.00
1.00   1.00   1.00   1.00   1.00   1.00
1.00   1.00   1.00   1.00   1.00   1.00

【问题讨论】:

  • 你的文件是用\t分割的吗?
  • 你把它们读入熊猫了吗?如果是这样df1.div(df2) 应该可以解决问题(如果索引/列按照您所说的对齐)到目前为止您尝试了什么?
  • 哪一部分令人困惑?
  • How to load data。只需更改 sep=' ' 以匹配您的文件
  • df1 = pd.read_csv(your_file,sep='\t') 或更改 sep=' \s+ 如果它的空格分隔

标签: linux shell for-loop awk


【解决方案1】:

这可能是你想要做的:

$ cat tst.awk
BEGIN { OFS="   " }
/^layer/ || !NF {
    if (NR != FNR) {
        gsub(/m-er/,"v-er")
        print
    }
    next
}
NR==FNR {
    for (i=1; i<=NF; i++) {
        f[FNR,i] = $i
    }
    next
}
{
    for (i=1; i<=NF; i++) {
        printf "%.02f%s", ($i ? f[FNR,i] / $i : 0), (i<NF ? OFS : ORS)
    }
}

$ awk -f tst.awk file1.txt file2.txt
layer  1     v-er modes          u = -15.0
1.00   1.00   1.00   1.00   1.00   1.00
1.00   1.00   1.00   1.00   1.00   1.00
1.00   1.00   1.00   1.00   1.00   1.00

layer  2     v-er modes          u =   0.0
1.00   1.00   1.00   1.00   1.00   1.00
1.00   1.00   1.00   1.00   1.00   1.00
1.00   1.00   1.00   1.00   1.00   1.00

layer  3     v-er modes          u =  10.0
1.00   1.00   1.00   1.00   1.00   1.00
1.00   1.00   1.00   1.00   1.00   1.00
1.00   1.00   1.00   1.00   1.00   1.00

【讨论】:

    猜你喜欢
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2019-05-14
    • 2015-02-27
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多