我有多个这样的文件:
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列。
答案 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