구분자 앞에 패턴 추가

구분자 앞에 패턴 추가

구분 기호 앞에 패턴을 추가하는 명령을 찾고 있습니다.

내 가시:

1 |Chris|ubuntu

이것이 내 구분 기호 |이며 이 입력으로 문자열을 생성하고 싶습니다.

산출

1 = ID and Chris = Name and Ubuntu = OS

때로는 내 입력에 값이 2개만 있는 경우도 있습니다. 가정하면 2 | Ram값은 있고 구분 기호는 없으므로 다음과 같이 인쇄되어야 합니다.

2=ID and Ram=Name

그래서, field1 + "and" + field2 + "and" + field3. 입력 문자열에서 field3을 사용할 수 없는 경우에 사용됩니다 field1 + "and" + field2.

답변1

awk -F '|' '
            { printf("%d = ID and %s = Name", $1, $2) } 
    NF == 3 { printf(" and %s = OS", $3) }
            { printf("\n") }' file

이것은 생성됩니다

1 = ID and Chris = Name and ubuntu = OS
2 = ID and  Ram = Name

주어진 데이터에 대해. 이 awk코드는 처음 두 필드를 printf형식 템플릿에 삽입합니다. 세 번째 필드를 사용할 수 있는 경우 운영 체제 부분이 동일한 줄에 출력됩니다. 그런 다음 줄은 개행 문자로 끝납니다.

답변2

안녕 밀러http://johnkerl.org/miller/doc, 이 입력 파일에서 시작

1|Chris|ubuntu 2|Ram

그리고 달리는 중

mlr --ifs "|" label ID,Name,OS input.csv

당신은 할 것

ID=1,Name=Chris,OS=ubuntu ID=2,Name=Ram

답변3

존재하다 Bash:

#!/usr/bin/env bash

if [ "$#" -eq 0 ]
then
    printf "Missing argument\n" >&2
    exit 1
fi

num_of_delimiters="$(grep -o '|' <<< "$1" | wc -l)"
sting="$(sed -E 's,\s+\|,|,g' <<< "$1")"
sting="$(sed -E 's,\|\s+,|,g' <<< "$sting")"

case "$num_of_delimiters" in
    1)
    echo "$(cut -d '|' -f1 <<< "$sting")"=ID and "$(cut -d '|' -f2 <<< "$sting")"=Name
    ;;
    2)
    echo "$(cut -d '|' -f1 <<< "$sting")" = ID and "$(cut -d '|' -f2 <<< "$sting")" = Name and \
         "$(sed  's/./\U&/' <<< "$(cut -d '|' -f3 <<< "$sting")")" = OS
    ;;
    *)
    printf "More than 2 delimiters or no delimiters\n" >&2
    exit 2
esac

또한 예제에서 볼 수 있듯이 공백을 인쇄하고 세 번째 단어의 첫 글자를 대문자로 변환합니다. 예:

$ ./sting.sh "2 | Ram"
2=ID and Ram=Name
$ ./sting.sh "1 |Chris|ubuntu"
1 = ID and Chris = Name and Ubuntu = OS

오류가 보고되지 않았습니다 https://www.shellcheck.net/.

관련 정보