![如何使特定位置的多列无效?](https://linux22.com/image/199906/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%89%B9%E5%AE%9A%E4%BD%8D%E7%BD%AE%E7%9A%84%E5%A4%9A%E5%88%97%E6%97%A0%E6%95%88%EF%BC%9F.png)
输入-
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