如何从多个文件中删除多个第一列?

时间:2019-01-16 17:23:24

标签: bash awk sed

我有多个这样的文件:

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

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

我知道如何对每个文件进行操作

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

是否可以对所有文件一次完成此操作?

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

2 个答案:

答案 0 :(得分:0)

首先备份文件,然后尝试执行此操作(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}//'

答案 1 :(得分:0)

只需使用for循环:

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