我想使用awk用文件名替换文件中的第5列 我试过这个
abstract class Base {
public static A: string = "Fallback_A";
public DoSmthWithClassName(): string {
return "Fallback_DoSmth";
}
constructor(...args: any[]); // overload for type consistency with children
constructor(x: string)
{ }
}
// typeof any non-abstract child of Base
type BaseType = typeof Base & (new(...args: any[]) => Base);
// decorator, modifies methods and static properties
function ClassDecorator<T extends BaseType>(valueA: string): (value: T) => T {
return (value: T) => {
value.prototype.DoSmthWithClassName = () => value.name + ".DoSmth." + value.A;
value.A = value.name + valueA;
return value;
}
}
@ClassDecorator("Foo") // OK
class Child0 extends Base {
}
@ClassDecorator("Foo") // OK
class Child1 extends Base {
constructor(x: number) {
super(x.toString());
}
}
@ClassDecorator("Foo") // Unable to resolve...
class Child2 extends Base {
static X: number = 0;
}
@ClassDecorator<typeof Child3>("Foo") // OK
class Child3 extends Base {
static X: number = 0;
}
但我不知道为什么我无法运行它,你知道我的错误在哪里吗?
它不喜欢我的第一行。
我的档案里面就是这样的。
我的文件名是Balteni_SV_ed2_MT_2016_D_P10_G + C_-4040m。
也许我必须删除第一行和最后一行?但我有很多像这样的文件。我不想覆盖,但要编辑它,分离是空间。
#!/bin/bash
For i in ls; do
awk '{$5 = "$i"; print}' $i > $i_edit
我想要这样的事情:
PROFILE Balteni_SV_ed2_M TYPE 3 unspecified m m
363923.46104 372500.00000 0 4040.000 Balteni_SV_ed2_MT_20 unspecified
363780.87963 372530.87963 0 4040.000 Balteni_SV_ed2_MT_20 unspecified
363750.00000 372535.75894 0 4040.000 Balteni_SV_ed2_MT_20 unspecified
EOD
答案 0 :(得分:1)
这是另一种方式
for f in *; do awk '{$5=FILENAME}1' "$f" > "$f"_edited; done
跳过第一行添加NR>1
限定符并跳过最后一行,您可以检查字段数,例如
for f in *; do awk 'NR>1 && NF>4 {$5=FILENAME}1' "$f" > "$f"_edited; done
答案 1 :(得分:1)
你真正需要的只是:
awk 'FNR==1{close(f); f=FILENAME"_edit"} {$5=FILENAME; print > f}' *
并且您的输入不会修改第一行和最后一行:
awk 'FNR==1{close(f); f=FILENAME"_edit"} FNR>1 && NF>1{$5=FILENAME} {print > f}' *