no de en fr sv
eple apfel apple pomme äpple
kake Kuchen cake gâteau tårta
每个以制表符分隔的字典文件中有20多种语言,并且它们是从文件到文件中随机排序的,因此我想找出批量提取所需列的解决方案。我想 grep所需的语言列,并删除我不需要的所有语言数据。
我想使用grep,cut或其他随时可用的Linux工具 - 任何事情都可以 只要它完成工作就可以了。
在我的特殊情况下,我现在想要检索" no"," en"和" sv"列。 所以,我希望我的输出文件最终看起来像:
no en sv
eple apple äpple
kake cake tårta
无论标题行顺序如何,相同的代码都应适用于数据,即它可以是" en fr sv de no"而不是上面的#34; no de en fr sv"或任何其他变化。
答案 0 :(得分:2)
awk -v FS='\t' -v OFS='\t' -v langs='no en se' '
# Collect the appropriate column numbers from the first row.
NR==1 {
for (i=1; i<=NF; i++) {
if (match(langs, "\\<"$i"\\>")) {
col[i]++
}
}
}
{
# Walk the columns and if this column number is in our list of columns print the value out.
for (i=1; i<=NF; i++) {
if (i in col) {
printf "%s%s", $i, OFS
}
}
print ""
}' file
如果某些条目的运行时间长于8个字母,则其输出可能会关闭(按列方式),在这种情况下,到column -t -s $'\t'
的管道可能会有帮助。