긴 줄을 자르고 표시기를 추가합니다.

긴 줄을 자르고 표시기를 추가합니다.

나는 샘플을 가지고 있습니다 :

"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문자인지 확인합니다.

열이 여러 개의 공백이나 탭(최소 2개)으로 구분되어 있고 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

이는 여전히 탭으로 구분된 출력을 작성합니다.

관련 정보