Warum erfolgt der Schnitt nicht in der rechten Spalte?

Warum erfolgt der Schnitt nicht in der rechten Spalte?
# uname -mrs
OpenBSD 6.0 amd64
# RANDOMNUMBER() { /usr/bin/openssl rand -hex 64 | tr -dc 0-9 | /usr/bin/cut -c-4;}
# while true; do WTF=$(/usr/bin/strings /dev/arandom | head -$(RANDOMNUMBER) | sort -R | /usr/bin/perl -pe 's/\n//g' | /usr/bin/cut -c1-63); echo "$WTF"; echo "$WTF" | wc -c; done
!+{l^RQ-QuK=iVYC\ud#pqNw?nJ"oyizU}NI5~0\HEagHv7`/6PI$|b_1)59Aj=
      64
3"fcALD`&L\#Ls7fP!Gs9Ksjv\)     ?Fm9]R#oRlEb%&=R{-zRvRE /})^uM:H9sq
      64
Q|Ik^.zuYu:|_DTt>)q48;[JVwX}F@yU)hu,~v=Wj*"ra'g=@#hJ$.ur\Ru'WMV
      64
lTYU6V2qm;[e;.dsxW+mWqf]LCylFsY,V7+71i}/6L)m<RtuCxH6,et<i[N(NV  
      64
>apV:8T e3      Y<ga$h*+9>4`kanC 35OHoG%\gG8vvWU?rM%XYuV*4?UIWVvB<!U
      64
 #b8vw:L!OvW    73/-iUPw}Ge|$ka{'E=tkTHmzb)1syK!fSN]_As'D>KGe_k<o=
      64
O5='9b}.NGChC]D{{ =^#tg7;EhzDJag`R-z/L<=LJ[h*aLI [2xPbz__+K_Bc|
      64
E\AxbSAu6seR=:-uwG$h86;r\gs(Ni0%95<O.+Yts)br9xd*>b`f    K!%Q_%+9I-
      64
8RXi=aJL3siO!PM5l]>~(5$bgp.#Z|p1,d6au-^0`mD9+Cdk@*].05g(:1,}f"R
      64
K\_a~oim<dq_^,JBjb$sYA,Icv@kOVWi2'z+us2BzW|~@l+iD3@euM|iS;"0tw&
      64
bI[Aev\{[YN"a^$)j'W[\4r?Ey[ !Jn32V6`PE(6WAqL~NYg&/{J-w > _uAS}i
      64
I|jm@onzPfAhK5HJq:V     h<p-<_oPvS68)2L\&4)CWM|GYv0l}8= 7 ZpW wH}UR
      64
i_x?KW3<v7/Pw   w6>gXw7#HE]n,d4mj8'my@)*15m]dK(+9[o!h<w^ $$PS)Q4@
      64
wJ1pv[3sHJrpXV=c-c{2%0A,F-.3;`M^cvV6E&|B"`@V+RYs        dlS*yEqsV_      $G6
      64
M_iq/+  |>*@CC4G.-?9s@;0tR^>&dh]5,sQu.8akCJU01qxiX5TUe&}=I_K;X%`
      64
^C
# 

Davon sind mir einige Zeilen (bei manueller Ausführung...) nicht ganz klar:

# echo '>apV:8T e3      Y<ga$h*+9>4`kanC 35OHoG%\gG8vvWU?rM%XYuV*4?UIWVvB<!U' | wc -c
      69
# 
# echo 'wJ1pv[3sHJrpXV=c-c{2%0A,F-.3;`M^cvV6E&|B"`@V+RYs        dlS*yEqsV_      $G6' | wc -c
      76
# 

Warum macht „cut“ so etwas? Ich habe es angewiesen, bei 63 Zeichen zu schneiden. Aber es gibt manchmal längere Zeilen als 63 aus, was ich beweisen kann, indem ich die Ausgabe später manuell auswähle, sie in ein Echo stecke und „| wc -c“ verwende. Vielleicht gibt es einen Fehler im „cut“-Befehl bezüglich Leerzeichen?

Für die erste manuelle Beispielzeile gibt das obere Skript 64 aus, eine manuelle Überprüfung zeigt jedoch, dass es tatsächlich 69 ist.

Antwort1

Sie haben dort Tabulatoren; jeder Tabulator zählt aus cutSicht von als ein Zeichen, kann aber mehr Platz einnehmen als auf dem Bildschirm. Darüber hinaus nimmt er eine Menge ein, die davon abhängt, wo in der Zeile er ausgegeben wird...

Jede Zeile, die länger als 64 Zeichen ist, verfügt über eine entsprechende Lücke, die mit einem Tabulatorstopp ausgerichtet ist (in den meisten Umgebungen dieses Jahrhunderts bisher acht Zeichen):

3"fcALD`&L\#Ls7fP!Gs9Ksjv\)     ?Fm9]R#oRlEb%&=R{-zRvRE /})^uM:H9sq
                           ^ tab here
                                ^ tabstop here
1234567812345678123456781234567812345678123456781234567812345678

Als Sie die Ausgabe für Ihren zweiten Satz Messungen kopiert und eingefügt haben, wurden die Leerzeichen kopiert, auf die die Registerkarten erweitert wurden. Daher wc -chaben Sie stattdessen diese gezählt.

verwandte Informationen