我有几个文件,每列有不同的列和不同的分隔符(逗号,空格和制表符)。我需要删除特定列的所有行的前10个字符。我知道例如sed的/ .........。//'可以做到这一点,但是,我怎样才能指出我想要的列,以及如何指定文件的分隔符。也许用awk更容易做到这一点?使用awk我知道如何指定列但不知道如何擦除前10个字符。谢谢。
答案 0 :(得分:4)
问题的第一部分,如何删除字段的前10个字符,单向是这样的:
$ echo 1234567890ABCDEF | awk '{$1=substr($1,11)}1'
ABCDEF
字符数不超过10个字段的字段将为空。
其次,要指定字段分隔符,假设您希望在输出中保留相同的分隔符,最好使用BEGIN
块并设置FS
和OFS
在awk变量中。
在此示例中,我们从逗号分隔记录的第二个字段中删除前10个字符:
$ echo field1,1234567890ABCDEF,field3 | awk 'BEGIN {FS=OFS=","} {$2=substr($2,11)}1'
field1,ABCDEF,field3
(对于制表符分隔:BEGIN {FS=OFS="\t"}
)
答案 1 :(得分:1)
在FS
中定义前移除功能和更多分隔符:
$ cat > test.in # \t below is really a tab
12345678901 2,3\t4
$ cat > test.awk
function ftrunc(str) { # this function removes up to 10 first chars of a named field
gsub(/^.{1,10}/,"",str)
return str
}
BEGIN {
FS="[, \t]" # look at me! look at me! look at me!
OFS="|"
}
{
print ftrunc($1),ftrunc($2),$3,$4
}
$ awk -f test.awk test.in
1||3|4