我有样品:
"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
是不包含space
或tab
需要截断的长行。
两个项目被分隔开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
这仍然会写入制表符分隔的输出。