2017-06-02 2 views
0

Je voudrais concaténer column2 jusqu'à column4. Exemple (first.txt):colonnes CONCAT dans un fichier

|ID|column2|column3|column4| 
|1 | a | b | c | 
|2 | d | e | f | 

A cette (mynewfile.txt):

ID|column2 
1 | a b c 
2 | d e f 

Ceci est mon script dans Cygwin: $ awk '{print $2" "$3" "$4 }' first.txt > mynewfile.txt

Bien sûr, il ne fonctionne pas sur bien .. Comment améliorer le script?

+1

'awk' utilise des espaces, comme le champ par défaut deliimter. Vous devez utiliser l'option '-F' pour le changer afin d'utiliser le tube comme délimiteur. – Barmar

Répondre

1

Vous devez définir le séparateur de champ de sorte qu'un tube avec des espaces optionnels autour de lui soit le délimiteur de champ.

Le tube au début de la ligne provoque un champ vide 1 devant le tube, de sorte que l'ID est le champ 2 et les colonnes 2-4 sont les champs 3-5. Il doit donc être:

awk -F' *\\| *' 'NR == 1 {print "ID|column2|"} NR > 1 {printf("%d | %s %s %s |\n", $2, $3, $4, $5)}' first.txt > mynewfile.txt 
+0

La colonne ID a disparu – user6308605

+0

cela fonctionne pour moi sur OS X. Je n'ai pas Cygwin, mais je ne vois pas pourquoi ce serait différent. – Barmar

+0

le 'column2' est maintenant dans la colonne' ID'. il devrait être fusionné avec le reste – user6308605

0

Pas spécialement général méthode GNUsed:

sed 's/^[|]//;1s/2.*/2/;1!{s/|/ /g2;s/ */ /2g}' first.txt 

Sortie:

ID|column2 
1 | a b c 
2 | d e f