list.txt
(INPUT)의 내 기록은 다음과 같습니다.
List of animals SET 1=Dog 2=Crow 3=Snake Pet,bird,reptile
List of Countries SET 1=France 2=Singapore 3=Columbia Europe,Asia,SouthAmerica
List of Parts SET 1=KeyBoard 2=Speaker 3=LEDpanel Computer,AudioPlayer,Television
List of Cities SET 1=Amsterdam 2=KualLumpur 3=Paris Netherlands,Malaysia,France
예를 들어 각 행의 마지막 열을 배열로 사용하여 숫자 1,2,3을 바꾸려고 합니다. Pet,bird,reptile
첫 번째 줄을 사용하여 Pet=Dog
bird=Crow
합계를 계산합니다 reptile=Snake
.
따라서 출력 파일은 다음과 같습니다.
List of animals SET Pet=Dog bird=Crow reptile=Snake
List of Countries SET Europe=France Asia=Singapore SouthAmerica=Columbia
List of Parts SET Computer=KeyBoard AudioPlayer=Speaker Television=LEDpanel
List of Cities SET Netherlands=Amsterdam Malaysia=KualLumpur France=Paris
를 사용하면 awk
마지막 열을 배열 문자열로 분할할 수 있습니다. 하지만 1, 2, 3을 같은 숫자로 바꿀 수는 없습니다.
답변1
a
구문을 사용하여 awk 배열의 항목을 반복할 수 있습니다 for (i in a)
. 예를 들어 다음과 같은 작업을 수행할 수 있습니다.
awk '{split($NF,a,","); $NF=""; for (i in a) sub(i"=",a[i]"=",$0); print}' list.txt
답변2
항상 3개의 항목( )이 있고 x=y
줄에 공백이 없으면 다음 awk
명령문이 작동합니다.
awk -F',| |=' '{printf "%s %s %s %s %s=%s %s=%s %s=%s\n", \
$1, $2, $3, $4, $11, $6, $12, $8, $13, $10}' list.txt
설명하다:
-F',| |='
: 필드 구분 기호를,
, 공백 및=
'{printf ...
원하는 형식으로 값을 인쇄하십시오.list.txt
입력 파일
답변3
이 스크립트는 연속적인 프로젝트 수에 관계없이 작동해야 합니다.
while read line do valType=($(echo $line | awk '{ print $NF }' | tr ',' ' ')) vals=($(echo $line | awk '{ $NF="";$1="";$2="";$3="";$4=""; print $0 }' | tr [1234567890] ' ' | tr '=' ' ' )) echo $line | awk '{print $1" "$2" "$3" "$4 }' | tr -d '\n' numVals=${#vals[@]} for i in $(seq 0 $((numVals-1))) do echo -n " "${valType[$i]}"="${vals[$i]} done echo " " done < list.txt
설명하다:
valType
쉼표로 구분된 요소를 포함하는 배열입니다.
vals
숫자와 등호가 제거된 행의 네 번째 위치와 마지막 위치 사이의 연관된 값을 포함합니다.
배열의 값 수를 반복하고 두 배열 모두에서 일치하는 값을 참조할 수 있습니다.
답변4
set '.\(=.[^ ]*\) ' '\([^,]*\),'
sed "s/\$/,/;s/$1$1$1$2$2$2/\4\1 \5\2 \6\3/
" <<\DATA
List of animals SET 1=Dog 2=Crow 3=Snake Pet,bird,reptile
List of Countries SET 1=France 2=Singapore 3=Columbia Europe,Asia,SouthAmerica
List of Parts SET 1=KeyBoard 2=Speaker 3=LEDpanel Computer,AudioPlayer,Television
List of Cities SET 1=Amsterdam 2=KualLumpur 3=Paris Netherlands,Malaysia,France
DATA
쉘 배열을 사용하여 배열을 설정합니다.
산출
List of animals SET Pet=Dog bird=Crow reptile=Snake
List of Countries SET Europe=France Asia=Singapore SouthAmerica=Columbia
List of Parts SET Computer=KeyBoard AudioPlayer=Speaker Television=LEDpanel
List of Cities SET Netherlands=Amsterdam Malaysia=KualLumpur France=Paris