주어진 열 길이만 자르는 방법은 무엇입니까?

주어진 열 길이만 자르는 방법은 무엇입니까?

입력하다:

a@notebook:~$ cat in.csv
'XYZ843141'^'ASDFSAFXYVFSHGDSDg sdGDS  dsGDSgfa assfd faSDFAS saDFSAFD adFSA343fa sdfSADF'^'BAAAR'^'YYY'^'..... and so on, further columns
'YYZ814384'^'ASfdEtRiuognfnseaFREQTzKb   aSFfdsaADSFSA  adsFdsa34 34 ASFfsas  saftrzj etrzrasdfasffasf safs'^'foooobaaar'^'ZZZ'^'..... and so on, further columns

산출:

a@notebook:~$ cat in.csv | SOMEMAGIC
'XYZ843141'^'ASDFSAFXYVFSHGDSDg s'^'BAAAR'^'YYY'^'..... and so on, further columns
'YYZ814384'^'ASfdEtRiuognfnseaFRE'^'foooobaaar'^'ZZZ'^'..... and so on, further columns

내 질문: 만약에:

'^'

은 구분 기호입니다. 그렇다면 SOMEMAGIC (awk/sed?)는 두 번째 열을 주어진 길이로 어떻게 자르나요? 예: 최대 20자:

ASDFSAFXYVFSHGDSDg sdGDS  dsGDSgfa assfd faSDFAS saDFSAFD adFSA343fa sdfSADF

이와 관련하여:

ASDFSAFXYVFSHGDSDg s

나머지는 모두 유지합니다.\

답변1

> 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

답변2

다음은 문자열에서 단 20자를 가져오는 간단한 sed 예제입니다.

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

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

또는자르다주문하다:

$ echo $str | cut -c 1-20

편집: 이것은 어떻습니까?

$ echo $str | awk -F "^" '{print $1,$2}'
'XYZ843141' 'ASDFSAFXYVFSHGDSDg s'

답변3

다음을 시도해 볼 수 있습니다.

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

^그러나 일부 필드가 있으면 실패합니다.

관련 정보