awk无法处理行内容超过2K的文件

awk无法处理行内容超过2K的文件

我使用 awk 更改文件中的行

export textContent="verylongtextmorethan4K"

awk '{ if (NR == 200) print "${textContent}\"; else print $0}' a.txt  > b.txt

但如果行文本长度超过 2K,则它将不起作用。我意识到这是因为要插入的文本很长。我该如何解决这个问题,将4K长文本插入一行。

答案1

使用perl,它被设计为没有这样的限制。

#!/usr/bin/perl

while (<>) {
    if ($. == 200) {
        print $ENV{'textContent'}, "\n";
    }
    else {
        print;
    }
}

或者简短的“oneliner”版本:

#!/usr/bin/perl
while (<>) { print ($. == 200) ? ($ENV{'textContent'} . "\n") : $_; }

将perl脚本保存在eg中x.pl,然后运行

perl x.pl a.txt > b.txt

或者首先使脚本可执行:

chmod +x x.pl
./x.pl a.txt > b.txt

<>返回输入的下一行,在 EOF 处返回 false,因此循环终止。

$.是 perl 的特殊变量,包含当前输入行号。

print由于 perl 不会自动向作为参数传递的内容添加换行符,因此我添加了"\n".在第一个版本中,print环境变量的内容和换行符作为列表传递;因此使用逗号。在第二个版本中,它们被连接在一起,因为三元运算符 ( ? :) 期望那里有一个值而不是一个列表。

也许您对三元运算符不熟悉。它采用以下形式:

condition ? value1 : value2

如果条件为真,则value1返回,否则返回value2。所以这里,如果行号是200,那么就返回很长的一行,否则$_就是当前记录(即行)的内容。

相关内容