Как усечь только данный длину столбца?

Я не то, что сведущий в sed. Но это может быть сделано легко в perl использование regex lookaround:

perl -pe 's/\\(?!N\b)/#/g' your_file_here

Это распечатает измененный файл к stdout. Для создания замен на месте можно сделать:

perl -pi -e 's/\\(?!N\b)/#/g' your_file_here

В основном это заменяет любой обратной косой чертой, не сопровождаемой N\b (символ N на границе слова) с #.

Править

Если Вы абсолютно уверены, что Ваши записи разграничены запятой, можно сделать это для покрытия случая когда \N в конце слова (как в SOLEM\N в примере Вы предоставили):

perl -pe ' s/\\/#/g; s/(\A|,)\s*#N\s*(\Z|,)/$1\\N$2/g;' your_file_here

Это просто занимает место, любая обратная косая черта со знаком "диез" затем ищет #N найденный между двумя запятыми, между началом строки и запятой или между запятой и концом строки.

3
01.07.2014, 16:22
3 ответа
> awk -v OFS="'^'" -F"'\\\\^'" '{if(length($2)>20) $2=substr($2,1,20); print;}' file
'XYZ843141'^'ASDFSAFXYVFSHGDSDg s'^'BAAAR'^'YYY'^'..... and so on, further columns
'YYZ814384'^'ASfdEtRiuognfnseaFRE'^'foooobaaar'^'ZZZ'^'..... and so on, further columns
.
5
27.01.2020, 21:11

Можно попробовать так:

paste -d^ <(cut -f1 -d^ in.csv) \
          <(cut -f2 -d^ in.csv | sed -e 's/^\(.\{21\}\).*/\1'\''/')\
          <(cut -f3- -d^ in.csv)

Однако это не удастся, если в некоторых полях есть ^.

.
0
27.01.2020, 21:11

Вот простой пример sed, чтобы получить только 20 символов из нашей строки:

$ str = "ASDFSAFXYVFSHGDSDg sdGDS  dsGDSgfa assfd faSDFAS saDFSAFD adFSA343fa sdfSADF"

$ echo $str | sed -e 's/^\(.\{20\}\).*/\1/'
ASDFSAFXYVFSHGDSDg s

Или с помощью команды cut:

$ echo $str | cut -c 1-20

EDIT: Как насчет этого :

$ echo $str | awk -F "^" '{print $1,$2}'
'XYZ843141' 'ASDFSAFXYVFSHGDSDg s'
3
27.01.2020, 21:11

Теги

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