Ich möchte bestimmte Spalten aus einer Datei basierend auf dem Header-Namen extrahieren. Einige der Namen haben Leerzeichen (die Datei ist tabulatorgetrennt). Ich kann die Leerzeichen nicht entfernen oder ersetzen, da nachfolgende Anwendungen betroffen sind. Was ich suche ist eine Spalte auf Header-Namen und geben sie in der Reihenfolge, zu extrahieren Ich wünscheprint Certains Spalten nach Header-Namen mit Leerzeichen (awk, sed)
Hier ist ein Beispiel für meine Datei:
Sample Note Intragenic Rate ABCDE_177447
1032 NA 0.97867626 0.9300704670625763 0.72782564
ABCDE_177447 NA 0.97836965 1.0 0.87218356
ABCDE_188399 NA 0.97859967 0.905527730405171 0.81188565
ABCDE_189595 NA 0.9787659 0.9059075892313707 0.8089241
ABCDE_189596 NA 0.9788054 0.9065243881070291 0.8092951
Mein gewünschten Ausgang;
Sample Intragenic ABCDE_177447
1032 0.97867626 0.9300704670625763 0.72782564
ABCDE_177447 0.97836965 0.87218356
ABCDE_188399 0.97859967 0.81188565
ABCDE_189595 0.9787659 0.8089241
ABCDE_189596 0.9788054 0.8092951
Ich habe diese Lösung AWK extract columns from file based on header selected from 2nd file
versucht, aber es für diese Lösung nicht Extracting columns from a file
mit Leerzeichen auf Namen und die gleiche Arbeit habe ich diese
$cat cols.awk
BEGIN {
n=split(cols,col)
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
next
}
{ sep=""
for (f=1; f<=n; f++) {
printf("%c%s",sep,$c[f])
sep=FS
}
print ""
}
auch versucht, Aber als ich mein Skript wie awk -F\t -f cols.awk.sh -v cols="Note,Sample,Intragenic Rate" metrics.txt
lief, bekam ich den folgenden Fehler:
awk: illegal field $(), name "1"
input record number 2, file metrics.txt
source line number 12
dank @anubhava, könnten Sie mir sagen, wie es zu tun für einschließlich Befehlszeilenargumente wie yourfile.sh "Cols1, cols 2" Eingabedatei? – user2380782
Innerhalb 'yourfile.sh' können Sie diesen awk-Befehl speichern:' awk -v cols = "$ 1" 'BEGIN {FS = OFS = "\ t"; nc = split (spalten, a, ",")} NR == 1 {für (i = 1; i <= NF; i ++) hdr [$ i] = i} {für (i = 1; i <= nc ; i ++) wenn (a [i] in hdr) printf "% s% s", $ hdr [a [i]], (i
anubhava
vielen Dank @anubhava – user2380782