![UNIX 스크립트에서 구조화되지 않은 레코드를 구조화된 레코드로 구성](https://linux55.com/image/152077/UNIX%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EA%B5%AC%EC%A1%B0%ED%99%94%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%80%20%EB%A0%88%EC%BD%94%EB%93%9C%EB%A5%BC%20%EA%B5%AC%EC%A1%B0%ED%99%94%EB%90%9C%20%EB%A0%88%EC%BD%94%EB%93%9C%EB%A1%9C%20%EA%B5%AC%EC%84%B1.png)
사용유닉스 시스템개발할 다음 코드를 작성합니다.
다음 데이터가 포함된 20-40GB 파일이 있습니다. 샘플 기록을 제공하세요.
AUTO="text1" CAR="its mine" LORRY="commercial vehicle" CART="simple " BULLCART="same old one simple with bull" TRUCK="Multi purpose"
AUTO="text2" BUS="commercial vehicle" LORRY="its a vehicle" CART="without bull" BULLCART="with bull" TRUCK="Multi purpose"
AUTO="text3" BUS="commercial vehicle" CAR="Personal" LORRY="mini one ?" BULLCART="bull" TRUCK="Multi purpose"
AUTO="" CART="simple without bull" BULLCART="nothing spl with bull" TRUCK="Multi purpose"
AUTO="long text" BUS="commercial vehicle" CAR="jubel" BULLCART="" TRUCK="Multi purpose"
AUTO="message" CAR="others" LORRY="commercial vehicle" BULLCART="not null" TRUCK="Multi purpose"
AUTO="cleverwiz" BUS="commercial vehicle" CAR="yours" LORRY="max vehicle" CART="bull is there" TRUCK="Multi purpose"
AUTO="passengers only" BUS="commercial vehicle" CAR="ramsoh" LORRY="maintainable " CART="old one" BULLCART="simple with bull"
필드 순서는 AUTO, BUS, CAR, LORRY, CART, BULLCART, TRUCK입니다.
예상되는 출력은 CAR이 없으면 세 번째 필드 CAR=""를 삽입해야 하고, LORRY가 없으면 LORRY=""를 네 번째 필드로 삽입해야 한다는 것입니다.
첫 번째 레코드를 보면 BUS가 존재하지 않는 경우 두 번째 필드에 BUS=""를 삽입해야 합니다. 따라서 출력은 다음과 같습니다.
AUTO="text1" BUS="" CAR="its mine" LORRY="commercial vehicle" CART="simple " BULLCART="same old one simple with bull" TRUCK="Multi purpose"
네 번째 레코드인 BUS, CAR, LORRY가 존재하지 않으므로 BUS="" CAR=""를 삽입해야 합니다. 출력은 다음과 같습니다
AUTO="" BUS="" CAR="" LORRY="" CART="simple without bull" BULLCART="nothing spl with bull" TRUCK="Multi purpose"
답변1
기성 솔루션을 버리는 것이 좋지 않다고 말할 수도 있지만, 물어보면 그렇습니다. 여기 있어요:
#!/bin/bash
# AUTO, BUS, CAR, LORRY, CART, BULLCART, TRUCK
get_param(){
param=`echo $1|sed -E '/.*\b('$2'\=\"[^"]*\").*/!d;s/.*\b('$2'\=\"[^"]*\").*/\1/'`
if [ -z "$param" ]; then
param=$2'=""'
fi
echo $param;
}
process_line(){
auto=`get_param "$1" 'AUTO'`
bus=`get_param "$1" 'BUS'`
car=`get_param "$1" 'CAR'`
lorry=`get_param "$1" 'LORRY'`
cart=`get_param "$1" 'CART'`
bullcart=`get_param "$1" 'BULLCART'`
truck=`get_param "$1" 'TRUCK'`
echo $auto $bus $car $lorry $cart $bullcart $truck
}
while read LINE;do
process_line "$LINE"
done < source.txt