我只想修改第二列“名称”并删除名称之间的所有空格,并保持 txt 文件的其余部分不变,然后打印它。
这是我的输入(制表符分隔的字段):
Roll NO Name RandomColumn1 RandomColumn2
1 Jason James my value my val 3
我想要的输出:
Roll NO Name RandomColumn1 RandomColumn2
1 JasonJames my value my val 3
我一直在使用但不成功的命令:
awk '{$3=$4; print }' | sed "s/^ *//"
答案1
awk 'BEGIN{ FS=OFS="\t" }{ gsub(" ", "", $2) }1' infile
FS为输入字段分隔符; OFS是输出字段分隔符;两者都设置为制表\t
符,然后我们删除(用空字符串替换)第二个字段中的所有空格字符并打印最终更新这1
用过的。
答案2
雇用GNU sed在其扩展正则表达式模式下,-E
我们可以像所示那样进行操作。首先用\n
已知在模式空间中不存在的标记 ( ) 隔开第二个字段。然后在循环中拾取这些标记之间的任何空间,并在循环后将市场恢复为字段分隔符。
sed -Ee '
s/\t/\n/;s//\n/;ta
:a
s/(\n.*) (.*\n)/\1\2/
ta
y/\n/\t/
' file
我们可以用蟒蛇3和嵌套列表理解以获得所需的输出:
python3 -c 'import sys
ifs,ors,ifile = "\t", "\n",sys.argv[1]
spc,ofs = " ",ifs
with open(ifile) as f:
print(*[ofs.join([f1,f2.replace(spc,""),f3_])
for l in f for f1,f2,f3_ in [l.rstrip().split(ifs,2)]],sep=ors)
' file
perl -F'\t' -pale '
substr($_,1+index($_,"\t$F[1]"),length($F[1])) =~ tr/ //d;
' file
答案3
命令
awk 'NR>1{$2=$2$3;$3=" "}1' filename
输出
Roll NO Name RandomColumn1 RandomColumn2
1 JasonJames my value my val 3