我想通过列在不同文件中的名称来提取一些列。
我在下面的链接中找到了这个有用的代码:AWK extract columns from file based on header selected from 2nd file
我试着编辑一些来打印页眉和限制页眉的长度。
#!/bin/bash
DATAFILE=${1:-data.txt}
COLUMNFILE=${2:-list.txt}
awk -v colsFile="$COLUMNFILE" '
BEGIN {
j=1
while ((getline < colsFile) > 0) {
col[j++] = $1
}
n=j-1;
close(colsFile)
for (i=1; i<=n; i++) s[col[i]]=i
}
NR==1 {
for (f=1; f<=NF; f++)
if ($f in s) c[s[$f]]=f
printf ${$f:0:3}
}
{ sep=""
for (f=1; f<=n; f++) {
printf("%c%s",sep,$c[f])
sep=" "
}
print ""
}
' "$DATAFILE"我之前在链接中使用了相同的示例。
$ cat data.txt
ID,head1,head2,head3,head4
1,25.5,1364.0,22.5,13.2
2,10.1,215.56,1.15,22.2
$ cat list.txt
ID
head1
head4
$ dataExtractor.sh data.txt list.txt
1,25.5,13.2
2,10.1,22.2我想要的输出是
ID,hea,hea
1,25.5,13.2
2,10.1,22.2在我编辑代码以包含${$f:0:3}之后,它给出了一个语法错误。请帮帮我,谢谢!
发布于 2017-03-17 00:22:17
来自man 1 awk
substr(s, i [, n]) Return the at most n-character substring of s
starting at i. If n is omitted, use the rest
of s...。
substr($f, 0, 3)https://stackoverflow.com/questions/42839273
复制相似问题