запретить bash печатать недопустимые последовательности юникода

Учитывая этот входной файл:

junk
junk
junk
junk
junk
junk
junk
junk
junk
junk
dataA,dataB,dataC,dataD,dataE,dataF
,,,,dataX,dataY
,,,,dataX,dataY
,,,,dataX,dataY
,,,,dataX,dataY
dataG,dataH,dataI,dataJ,dataK,dataL
,,,,dataX,dataY
,,,,dataX,dataY
,,,,dataX,dataY
,,,,dataX,dataY
dataM,dataN,dataO,dataP,dataQ,dataR
,,,,dataX,dataY
,,,,dataX,dataY
,,,,dataX,dataY
,,,,dataX,dataY

Кажется, это помогает:

$ awk 'BEGIN {FS=","; OFS=","} NR<11 {next} (NR-11)%5==0 { d1=$1;d2=$2;d3=$3;d4=$4 } (NR-11)%5 { print d1,d2,d3,d4,$5,$6}' input2
dataA,dataB,dataC,dataD,dataX,dataY
dataA,dataB,dataC,dataD,dataX,dataY
dataA,dataB,dataC,dataD,dataX,dataY
dataA,dataB,dataC,dataD,dataX,dataY
dataG,dataH,dataI,dataJ,dataX,dataY
dataG,dataH,dataI,dataJ,dataX,dataY
dataG,dataH,dataI,dataJ,dataX,dataY
dataG,dataH,dataI,dataJ,dataX,dataY
dataM,dataN,dataO,dataP,dataX,dataY
dataM,dataN,dataO,dataP,dataX,dataY
dataM,dataN,dataO,dataP,dataX,dataY
dataM,dataN,dataO,dataP,dataX,dataY

Чтобы разбить сценарий awk:

BEGIN {
   FS=","     # Set the field separators for
   OFS=","    # input and output for CSV data
} 

NR<11 {next}  # Skip the first ten lines of the file

(NR-11)%5==0 { # On every fifth line after the tenth,
    d1=$1      # Use variables to hold the data values
    d2=$2      # which are to be copied to the next
    d3=$3      # few rows of output
    d4=$4
}

(NR-11)%5 {    # On all non such lines after the tenth,
   # Print the data, substituting the data held from the marker lines
   print d1,d2,d3,d4,$5,$6
}
0
09.02.2020, 08:02
1 ответ

Вы не должны создавать эти последовательности в первую очередь. Это напечатает пробелы для управляющих символов(\pC)и даст меткам(\pM)место для перемещения :

.
perl -CO -pe 's{^([0-9A-F]+)\b}{$x=$1,$c=chr hex $x;if($c=~/\pC/){$c=" "}elsif($c=~/\pM/){$c=" $c"}"$c $x"}e' NamesList.txt

(используйте -i NamesList.txt, если вы хотите отредактировать файл на месте)

См. Свойства символов Unicode . Суррогаты, двунаправленные метки и другие элементы управления, которые вы НЕ хотите отображать, находятся в категории «Другое»(\pC). Акценты и другие объединяющие знаки находятся в категории «Знаки»(\pM).

0
28.04.2021, 23:24

Теги

Похожие вопросы