長い行を切り取り、インジケータを追加します。

長い行を切り取り、インジケータを追加します。

私はサンプルを持っています:

"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

2つのプロジェクトが分離されています。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

これはまだタブ区切りの出力を作成します。

関連情報