【问题标题】:How to delete multiple first columns from multiple files?如何从多个文件中删除多个第一列?
【发布时间】:2019-01-17 01:59:00
【问题描述】:

我有多个这样的文件:

trans_ENSG00000047849.txt.traw
trans_ENSG00000047848.txt.traw
trans_ENSG00000047847.txt.traw
...

每个都有大约 300 列。列用制表符分隔。我想从每个文件中删除前 7 列。

我知道如何为每个文件执行此操作:

cut  -f 7- trans_ENSG00000047849.txt.traw > trans_ENSG00000047849.txt.trawN

有没有办法一次性处理所有文件?

注意:开头有一个标签。因此我在这里使用 cut -f 7 而不是 cut -f 8 来删除前 7 列。

【问题讨论】:

  • cut -f 7- 表示删除 6 列。由于您在每个开头都有一个tab,所以我想您想删除5 的真实数据列;)
  • 我想删除 7 列。我在开头确实有标签,因此我正在执行 cut -f 7.
  • 啊...这很奇怪。无论如何,只要问题解决了,我想我们可以忽略这个:)

标签: bash awk sed


【解决方案1】:

只需使用for 循环:

for file in *.txt.traw
do 
    cut  -f 7- "$file" > "$file"N
done

【讨论】:

    【解决方案2】:

    先备份你的文件,然后试试这个(GNU sed):

    sed -ri 's/^([^\t]*\t){7}//' trans_*.txt.traw
    

    -i sed 将更改您的文件。 (您可以删除i 进行测试)。

    例如:

    $ cat file
    1       2       3       4       5       6       7       8       9       0
    a       b       c       d       e       f       g       h       i       j
    
            dfad            da
    $ sed -ri 's/^([^\t]*\t){7}//' file
    
    $ cat file
    8       9       0
    h       i       j
    
            dfad            da
    

    但是,该命令很简单,因此当列数少于 7 列时它不会删除。 (猜你不会有这样的台词吧?)

    如果在少于 7 列时仍要删除:

    sed -r 's/^([^\t]*(\t|$)){,7}//'
    

    【讨论】:

    • 嗨,谢谢。这会删除前 8 列,我应该这样做: sed -ri 's/^([^\t]*\t){6}//' trans_*.txt.traw
    • @anikaM 在您的问题中放入一些示例数据。该命令应该只删除七列(七列及其后的TAB)。
    • 是的,开头有tab,谢谢你的帮助!
    • @anikaM 很高兴它有帮助:)
    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    相关资源
    最近更新 更多