【发布时间】:2018-06-23 19:06:35
【问题描述】:
我有一个文件,我正试图从使用 AWK 中删除客户名称。 该文件是一个固定宽度的文件,每一列都有含义。
该文件由多行组成,格式相同,与以下非常相似:
1234-123 123456 12345678901234CUSTOMER NAME TO REMOVE12345-1234 TRN 123-123 12345678901-1234 TRN 12345678
1234-123 123456 12345678901234CUSTOMER NAME TO REMOVE12345-1234 TRN 123-123 12345678901-1234 TRN 12345678
1234-123 123456 12345678901234CUSTOMER NAME TO REMOVE12345-1234 TRN 123-123 12345678901-1234 TRN 12345678
1234-123 123456 12345678901234CUSTOMER NAME TO REMOVE12345-1234 TRN 123-123 12345678901-1234 TRN 12345678
我需要用一个假想的名称交换客户名称,以便所需的输出是:
1234-123 123456 12345678901234SENTINAL PRIME 12345-1234 TRN 123-123 12345678901-1234 TRN 12345678
1234-123 123456 12345678901234OPTIMUS PRIME 12345-1234 TRN 123-123 12345678901-1234 TRN 12345678
1234-123 123456 12345678901234BUMBLE BEE 12345-1234 TRN 123-123 12345678901-1234 TRN 12345678
1234-123 123456 12345678901234IRON HIDE 12345-1234 TRN 123-123 12345678901-1234 TRN 12345678
我有一个我想使用的转换器名称列表,存储在一个名为 transformer.names 的文件中。
SENTINEL PRIME
OPTIMUS PRIME
BUMBLEBEE
IRONHIDE
但是,为了使原始文件的每一行保持相同的宽度,我需要用空格右填充变压器名称,因为我拥有的变压器名称都是不同的长度。
似乎可以使用 AWK 将这些名称正确填充到一定长度,但我还没有设法弄清楚(或找到足够清晰的答案)让我理解。
以下是我当前的 AWK 脚本。
#!/usr/bin/awk -f
BEGIN {
}
{
getline line < "transformer.names"
print substr($0, 0, 30) line substr($0, 62, 120)
}
我用这个命令运行它:
my_program.awk my-file.txt
我想我可以用这样的一行来代替上面的打印行,但是我还没有设法让它工作。
printf "-%32s|", substr($0, 0, 30) line substr($0, 62, 120)
任何提示都会很棒!
【问题讨论】:
-
能否请您提供更多示例以供输入,这将有助于我们为您提供帮助。
-
完成。干杯:)
标签: awk