从制表符分隔的输入文件中删除特定字段
remove specific fields from tab separated input file
带制表符分隔字段的输入文件#1:
one two three four five six four
one two three four five six four
one two three four five six four
案例 1:我需要从每一行中删除所有包含字符串的字段,例如 four
并仍然得到单个 TAB 分隔的剩余字段。
案例 2:我需要删除第 n 列并为输出中的剩余字段保留一个制表符分隔,但这里我得到多个制表符:
$ echo -e "one\ttwo\tthree\tfour\tfive\tsix\tfour\none\ttwo\tthree\tfour\tfive\tsix\tfour\none\ttwo\tthree\tfour\tfive\tsix\tfour"|awk -F"[\t]" '{="";=""}{print [=11=]}' OFS='\t'
one two four six four
one two four six four
one two four six four
我可以通过 tr -s '\t'
发送输出来修复它,但是如何修改 awk 以避免 tr
命令?
您可以将输出通过管道传输到 sed
,尽管 awk
是一个可行的解决方案:
sed 's/\t*[^\t]*four[^\t]*//g'
或者 awk
:
awk -F\t '{r = ""; for(i=1; i<=NF; i++) if($i !~ /four/) r = (r=="" ? "" : r FS) $i; print r}'
带制表符分隔字段的输入文件#1:
one two three four five six four
one two three four five six four
one two three four five six four
案例 1:我需要从每一行中删除所有包含字符串的字段,例如 four
并仍然得到单个 TAB 分隔的剩余字段。
案例 2:我需要删除第 n 列并为输出中的剩余字段保留一个制表符分隔,但这里我得到多个制表符:
$ echo -e "one\ttwo\tthree\tfour\tfive\tsix\tfour\none\ttwo\tthree\tfour\tfive\tsix\tfour\none\ttwo\tthree\tfour\tfive\tsix\tfour"|awk -F"[\t]" '{="";=""}{print [=11=]}' OFS='\t'
one two four six four
one two four six four
one two four six four
我可以通过 tr -s '\t'
发送输出来修复它,但是如何修改 awk 以避免 tr
命令?
您可以将输出通过管道传输到 sed
,尽管 awk
是一个可行的解决方案:
sed 's/\t*[^\t]*four[^\t]*//g'
或者 awk
:
awk -F\t '{r = ""; for(i=1; i<=NF; i++) if($i !~ /four/) r = (r=="" ? "" : r FS) $i; print r}'