【问题标题】:extract a column from many files and paste together in a single file从多个文件中提取一列并粘贴到一个文件中
【发布时间】:2014-07-21 11:59:31
【问题描述】:

我有许多文件(250-20000 之间),每个文件都包含两列和头文件。 我想从这些文件中提取第二列并将它们全部粘贴到一个文件中,以便进行分析。

#Frame      Dih_00000
       1     -92.6371
       2     -97.9913
       3     -91.1572
       4     -89.9374
       5     -91.8934
       6     -93.1060
       7     -93.4912

文件看起来像这样。 请你帮我如何使用 awk 或 python 脚本来做到这一点。

【问题讨论】:

  • 你自己先试试吧。

标签: python linux awk


【解决方案1】:
awk '{print $2}' dihed_*.dat > file.new

或者只使用cut 命令

cut -d" " -f2 dihed_*.dat > file.new

编辑

不知道它是否优雅的解决方案,但它满足您的要求。

tail -q -n +2  dihed_*.dat | awk '{print $2}' > file.new

tail -q -n +2  dihed_*.dat | cut -d" " -f2 > file.new

【讨论】:

  • 这与 Dimitry 发布的相同,但不使用 cat
  • @Jotne 苹果和梨是两种不同的东西。
  • 谢谢 Jayesh。但问题是我有很多文件,每个文件都命名为 dihed_1.dat 到 dihed_500.dat。如何在 awk 中编写一个循环,以便我可以输入任意数量的文件。跨度>
【解决方案2】:
cat file.in | awk {'print $2'} > file.out

获取第二列并将其保存在file.out中

【讨论】:

  • 您不应将catawk 之类的程序一起使用。
  • @Jotne 为什么?请澄清或给我一个链接。谢谢
  • 进行谷歌搜索。 sed awk 可以自己读取文件。使用cat 会使其运行速度变慢并使用更多资源。在awk 中的功能也像FILENAME 一样不起作用。你的单引号是错误的。 awk '{print $2}'
  • @ZagorulkinDmitry 特别是谷歌“UUOC”,它代表“无用的猫”。这是一个很常见的问题,它有自己的缩写。
【解决方案3】:

你可以的。

awk '$0=$2' files* > new_file

【讨论】:

  • 如果我理解正确,这只是从一个文件中提取第二列并将其发送到新文件。如果有“n”个输入文件怎么办(从所有附加它们中提取第二列并发送到单个输出文件)。谢谢
  • @amir 这就是我写file*的原因。假设您的所有文件都以2014_ 开头。然后使用2014_*,所有这些文件都将被选中,我们将所有这些文件中的第2列放入new_file
【解决方案4】:
awk '{ a[FNR] = (FNR in a ? a[FNR] OFS : "") $2 } END{ for (i=1;i<=FNR;i++) print a[i] }' file1 file2 ...

以上假设您的所有文件都具有相同的行数。如果不是这种情况,请告诉我们并更新您的问题以发布一些更具代表性的示例输入(例如 3 个不同长度的小文件)和预期输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多