截断长行并附加指示符号

截断长行并附加指示符号

我有样品:

"this is a long title must in a doule quotes"     this_is_a_solid_long_line_without_space_or_tabs

"this is a long title must in a doule quotes"是双引号中的长行,需要截断。

this_is_a_solid_long_line_without_space_or_tabs是不包含spacetab需要截断的长行。

两个项目被分隔开tab

预期输出:

"this is a long title mus..>      this_is_a_solid_long_li..>

表示..>一条长线。

答案1

假设原始文件中的列是制表符分隔的:

$ awk -v len=20 -F '\t' 'BEGIN { OFS=FS } 
      { for (i=1; i<=NF; ++i) if (length($i)>len) $i = substr($i,1,len-3) "..>" }; 1' file
"this is a long t..>    this_is_a_solid_l..>

这会遍历每行上的列,如果任何列比用户提供的len变量长,则会被截断。截断可确保列的长度(包括指示符 ( ..>))恰好为len字符。

如果列由多个空格或制表符(至少两个)分隔,并且您使用的是 GNU awk,那么您可以使用

awk -v len=20 -F '[[:blank:]]{2,}' 'BEGIN { OFS="\t" }
    { for (i=1; i<=NF; ++i) if (length($i)>len) $i = substr($i,1,len-3) "..>" }; 1' file

这仍然会写入制表符分隔的输出。

相关内容