특정 위치에서 여러 열을 무효화하는 방법은 무엇입니까?

특정 위치에서 여러 열을 무효화하는 방법은 무엇입니까?

입력하다-

FN|LN|ADD|STATE|PIN|CONT|GRP|PCN|BIN|TOKEN72|TOKEN73|TOKEN74|TOKEN75|ndc|ncpdpd
FN1|LN1|ADD1|STATE1|PIN1|CONT1|GRP1|PCN1|BIN1|TOKEN721|TOKEN731|TOKEN741|TOKEN751|ndc1|ncpdpd1
FN2|LN2|ADD2|STATE2|PIN2|CONT2|GRP2|PCN2|BIN2|TOKEN722|TOKEN732|TOKEN742|TOKEN752|ndc2|ncpdpd2

위 데이터의 7, 8, 9열을 비워두고 출력합니다.

FN|LN|ADD|STATE|PIN|CONT||||TOKEN72|TOKEN73|TOKEN74|TOKEN75|ndc|ncpdpd
FN1|LN1|ADD1|STATE1|PIN1|CONT1||||TOKEN721|TOKEN731|TOKEN741|TOKEN751|ndc1|ncpdpd1
FN2|LN2|ADD2|STATE2|PIN2|CONT2||||TOKEN722|TOKEN732|TOKEN742|TOKEN752|ndc2|ncpdpd2

다음 명령을 시도했습니다 awk -F'|' 'FNR==NR{$7=" ";$8=" ";$9=" ";print}'

FN LN ADD STATE PIN CONT       ndc ncpdpd
FN1 LN1 ADD1 STATE1 PIN1 CONT1       ndc1 ncpdpd1
FN2 LN2 ADD2 STATE2 PIN2 CONT2       ndc2 ncpdpd2

나는 이것을 출력으로 얻습니다.

답변1

AWK 없음, 단 한 줄의 Python으로 읽기 쉬움

cat test.txt | python -c "import sys; sys.stdout.write(''.join('|'.join(c for n, c in enumerate(l.split('|')) if n not in (7,8,9)) for l in sys.stdin))"

답변2

 awk -F "|" 'OFS="|"{$7=$8=$9="";print}' filename

산출

FN|LN|ADD|STATE|PIN|CONT||||TOKEN72|TOKEN73|TOKEN74|TOKEN75|ndc|ncpdpd
FN1|LN1|ADD1|STATE1|PIN1|CONT1||||TOKEN721|TOKEN731|TOKEN741|TOKEN751|ndc1|ncpdpd1
FN2|LN2|ADD2|STATE2|PIN2|CONT2||||TOKEN722|TOKEN732|TOKEN742|TOKEN752|ndc2|ncpdpd2

답변3

간단한 방법은

cat T0 | cut -f1-6,10-13 -d '|'

사용할 열 수를 잘 모르는 경우

cat T0 | cut -f1-6,10-99 -d '|'

출력은 다음과 같습니다.

FN|LN|ADD|STATE|PIN|CONT|TOKEN72|TOKEN73|TOKEN74|TOKEN75|ndc|ncpdpd
FN1|LN1|ADD1|STATE1|PIN1|CONT1|TOKEN721|TOKEN731|TOKEN741|TOKEN751|ndc1|ncpdpd1
FN2|LN2|ADD2|STATE2|PIN2|CONT2|TOKEN722|TOKEN732|TOKEN742|TOKEN752|ndc2|ncpdpd2

관련 정보